web-dev-qa-db-ja.com

2つのExcelスプレッドシートを比較する方法は?

2つのExcelスプレッドシートを比較したい

どちらも同じ列を同じ順序で持っていますが、同じ行は持っていません。

各行の一意のIDと個人データ(住所、電話番号など)を含む、1,000行と50列のスプレッドシートがあります。

1年前に抽出した同じベースと比較したい。

私の目的は、すべての変更(たとえば、住所を変更した人)を知ることです。

私はスプレッドシートを試してみました(ここで説明します: 2つのExcelファイルを比較 )。新品ではありません。

スプレッドシートをExcelの行番号と比較します。最初の列(一意のID)と比較できますか?

これは非常に単純化された例です: https://filebin.net/g4w98251y9mfwug6

私の2つのスプレッドシートを表す2つのシートがあります。

ご覧のとおり、両方に同じ列がありますが、

  • 両方のシートに変更のない行があります(すべての行は同じです)
  • 両方のシートにある行がありますが、変更があります(私の例ではオレンジ色)
  • 12月のシートだけにある行があります(これらの行を特定する必要はありません)。
  • 1月のシートのみ(この例ではオレンジ色)にある行があります

オレンジ色はまさに私が欲しいものですが、この例では手動で行うことができます:12月と1月を比較します。実際のスプレッドシートでは、変更、データ、行、列などが多すぎるため、手動で行うことはできません。毎月これを行います。

変更できない列はAのみです。

8
CILUEA

スプレッドシートで50列を使用すると便利です。これは、列#51、#52、…が使用できることを意味します。列AZ(列#52)に入力できる「ヘルパー列」を使用すると、問題はかなり簡単に解決されます。各シートの行1にヘッダー(wordsIDNameAddressなど))が含まれていると仮定しますので、それらを比較する必要はありません(列は両方のシートで同じ順序です)。また、ID(一意の識別子)が列Aにあると仮定します。 (そうでない場合、答えは少し少し複雑になりますが、それでもかなり簡単です。)セル内_AZ2_(使用可能な列、最初の行)データに使用)、入力

_=B2&C2&D2&…&X2&Y2&Z2&AA2&AB2&AC3&…&AX2
_

_B2_から_AX2_までのすべてのセルをリストします。 _&_はテキスト連結演算子であるため、_B2_にAndyが含まれ、_C2_に_New York_が含まれる場合、_B2&C2_は_AndyNew York_に評価されます。同様に、上記の式は行のデータallを連結し(IDを除く)、次のような結果が得られます。

AndyNew York1342 Wall StreetInvestment BankerElizabeth2catcollege degreeUCLA…

数式は長くて入力するのが面倒ですが、必要なのは1回だけです(ただし、実際に入力する前に以下の注を参照してください)。列AXは列#50であるため、_AX2_を通過することを示しました。当然、この式はID以外のすべてのデータ列をカバーする必要があります。具体的には、比較するすべてのデータ列を含める必要があります。その人の年齢の列がある場合、その列は(自動的に?)誰でも毎年異なり、レポートされないようにする必要があります。そしてもちろん、連結式を含むヘルパー列は、最後のデータ列の右側のどこかにあるはずです。

セル_AZ2_を選択し、1000行すべて下にドラッグ/フィルします。そして、両方のワークシートでこれを行います。

最後に、変更を強調表示するシートで(おそらく、これが最近のシートだと思います)、強調表示するセルをすべて選択します。これが列Aだけなのか、列Bだけなのか、行全体(つまり、AからAX)なのかわかりません。 2行目から1000行目まで(またはデータが最終的に到達する可能性のある場所)にあるこれらのセルを選択し、[条件付き書式]→[新規ルール…]に移動して、[数式を使用して書式設定するセルを決定する]を選択し、次のように入力します。

_=IFERROR(VLOOKUP($A2,'December 2017'!$A$2:$AZ$1000,52,FALSE), "") <> $AZ2
_

「この式が真である場合のフォーマット値」ボックスに入力します。これは、現在の(「January 2018」)シートの現在の行(セル_$A2_内)のID値を取得し、前の(「12月2017」)シートの列Aで検索して、連結されたデータを取得しますその行からの値と、それをこの行の連結されたデータ値と比較します。 (もちろん、AZはヘルパー列、_52_はヘルパー列の列番号、_1000_は「2017年12月」の最後の行です」データまたはそれ以上のシートを含むシート。たとえば、正確であることを心配するのではなく、_1200_を入力できます。)次に、[フォーマット]をクリックして、必要な条件付きフォーマット(たとえば、オレンジ色の塗りつぶし)を指定します。

列数がHのヘルパー列を使用して、数行と数列のデータ列の例を実行しました。

previous month/year (December 2017) sheet

current month/year (January 2018) sheet, with changes highlighted in orange

Andyの行がオレンジ色になっていることに注目してください。Andyはニューヨークからロサンゼルスに移動したためです。Debraの行は彼女が新しいエントリなのでオレンジ色になっています。

注:行の2つの連続した列にthereactのような値があり、これが翌年にthereactに変わる可能性がある場合、これは単に連結値を比較しているだけであり、その(thereact)は両方のシートで同じであるため、違いとして報告されません。これが心配な場合は、データに含まれる可能性が低い文字(_|_など)を選択して、フィールドの間に挿入します。したがって、ヘルパー列には

_=B2&"|"&C2&"|"&D2&"|"&…&"|"&X2&"|"&Y2&"|"&Z2&"|"&AA2&"|"&AB2&"|"&AC3&"|"&…&"|"&AX2
_

その結果、次のようなデータが得られます。

アンディ|ニューヨーク1342ウォールストリート|投資バンカー|エリザベス| 2 |猫|大学度| UCLA |…

_the|react_≠_there|act_であるため、変更が報告されます。おそらくこれについて心配する必要がありますが、実際の列が何であるかに基づいて、これが問題になることはないと確信する理由があるかもしれません。

これが機能するようになったら、ヘルパー列を非表示にすることができます。

4
Scott

[表示]タブに移動し、[新しいウィンドウ]をクリックします。新しいウィンドウに移動し、並べてクリックします。同期スクロールをクリックすると、スクロールを同期できます。添付画像を確認してください: Excel sheets side by side

同期スクロールは、異なるワークシートを同時にスクロールできるという利点があります。ボタンを切り替えると、両方を表示して、1つのワークシートのみをスクロールできます。

1
Cetza Nido

では、次の2つのいずれかを実行します。

1.- OOTB解決策は、「データ」->「データツール」->「削除(これはスペイン語からの直接の翻訳です)複製」に移動することです。このようにして、両方のテーブルを追加すると、変更されたデータと一意のみのデータになります。そのため、一意のIDでCountIfをフィルターで除外するには、1としてカウントされているものの選択を解除します。uniqueIdで注文すると、明確になります変更点を確認してください。

2.-この式を使用する

IF(Index("rangetoreturn";Match("CellofUniqueID";"Rangeofuniqueidtolookinto";0))<>"OneOftheCellthatcontainsthesameasRangeToReturn";"Info Has Changed";"InfoHasNotChanged")

この数式は右下にドラッグできます。したがって、「CellofUniqueID」のテーブルと同じ行数のif条件のテーブルを取得します。 「Info Has changed」の位置は、他のテーブルのどのセルがその内容を変更したかを示します。したがって、この式を新しいシートで使用して、新しいテーブルを作成します。次に、フィルターを確認して、「InfoHasNotChanged」(または使用したいWord)の選択を解除します。

「rangetoreturn」と「Rangeofuniqueidtolookinto」は1つのテーブル(またはシート)からのものであり、「CellofUniqueID」は他のテーブルからのものです。

乾杯

1
dmb