数百万の行を持つ2列のデータを比較し、両方の列の間で一意の値を抽出する方法がわからない場合は、この記事を読む必要があります。 VBAコードを使用して、2列のデータを比較し、次の2列の違いを示します。

質問:列AとBに複数の値が存在します。マクロで、両方の列の40 k行を超えるデータをチェックし、各列から次の列に一意のエントリのリストを抽出する必要があります。それぞれ列CとD。この例では、40行のサンプルデータのみを取得しています。

元の質問を見つけることができますhttp://www.excelforum.com/excel-programming-vba-macros/1094194-compare-data-in-columns-a-and-b-show-differences-in-columns-c-and -d.html [ここ]

以下はデータのスナップショットです:

img1

===

2つの列のリストを比較するには、以下の手順に従ってVBエディターを起動する必要があります。

[開発者]タブをクリックし、[コード]グループから[VisualBasic]を選択します

img2

  • 以下のコードを標準モジュールにコピーします

Sub PullUniques()

Dim rngCell As Range

For Each rngCell In Range("A2:A40")

If WorksheetFunction.CountIf(Range("B2:B40"), rngCell) = 0 Then

Range("C" & Rows.Count).End(xlUp).Offset(1) = rngCell

End If

Next

For Each rngCell In Range("B2:B40")

If WorksheetFunction.CountIf(Range("A2:A40"), rngCell) = 0 Then

Range("D" & Rows.Count).End(xlUp).Offset(1) = rngCell

End If

Next

End Sub

img3

  • 上記のマクロはすべて実行するように設定されています。 F5キーを押すか(現在Visual Basic Editor画面を表示している場合)、ショートカットキー「ALT + F8」を使用してマクロを選択し、実行ボタンをクリックします

img4

  • 列AとBの一意のリストは、列CとDに自動的に生成されます

img5

コードの説明:

上記のコードでは、結果を取得するためにForループとともにIF関数を使用します。

Dim rngCell AsRangeを宣言します。 rngCell As Rangeを宣言する目的は、サンプル範囲「A2:A40」に特定の名前を割り当てることです。つまり、この例では「rngCell」をFor Each rngCell In Range( “A2:A40″);に割り当てます。条件IfWorksheetFunction.CountIf(Range( “B2:B40″)、rngCell)= 0の「rngCell」内の各セルをチェックします。このコード行は、COUNTIF VBA関数を使用して、基準範囲B2:B40をチェックし、基準rngCellがゼロに等しい場合、列Cに、rngCellに格納されている値が保存されます。同様に、列Bに対してFor Each Loopを実行し、抽出します。列Dの一意の値結論:各列からテキストまたは値の一意のリストを取得できます。列C(結果-リスト1には存在するが、リスト2には存在しない)および列D(結果-リスト2には存在するが、リスト1には存在しない)のヘッダー名。同様の要件があるが、列の数が2つを超える場合は、結果を取得するためにコードを微調整する必要があります。

image 29

私たちのブログが気に入ったら、Facebookで友達と共有してください。また、TwitterやFacebookでフォローすることもできます。

皆様からのご意見をお待ちしております。私たちの仕事を改善、補完、革新し、より良いものにする方法をお知らせください。 [email protected]_までご連絡ください