Option Explicit
Dim FirstRow As Long
Dim FirstCol As Long
Dim LastRow As Long
Dim LastCol As Long
Sub ComparisonData()
Application.ScreenUpdating = False
Dim rc As Integer
'rc = MsgBox("Choose the items to compare.")
FirstRow = Selection.row
FirstCol = Selection.Column
'Cells(FirstRow, FirstCol).Value = "First"
'Debug.Print (FirstCellStr)
LastRow = Selection(Selection.Count).row
LastCol = Selection(Selection.Count).Column
'Cells(LastRow, LastCol).Value = "Last"
'Debug.Print (LastCellStr)
Dim colc As Collection
Dim colc2 As Collection
Set colc = MakeCollection(FirstRow, FirstCol, LastRow, LastCol)
Set colc2 = MakeCollection(FirstRow, FirstCol + 1, LastRow, LastCol + 1)
Call DoComparison(colc, colc2, FirstRow, FirstCol)
Application.ScreenUpdating = True
End Sub
Function MakeCollection(FirstRow As Long, FirstCol As Long, LastRow As Long, LastCol As Long) As Collection
Dim colfunc As New Collection
Dim i As Long
Dim j As Long
For i = FirstRow To LastRow
For j = FirstCol To LastCol
colfunc.Add Item:=ActiveSheet.Cells(i, j).Value, Key:=i & ", " & j
Next
Next
Set MakeCollection = colfunc
End Function
Sub DoComparison(colcfunc1 As Collection, colcfunc2 As Collection, FirstRow As Long, FirstCol As Long)
Dim i As Long
Dim j As Long
Dim row As Long
Selection.Interior.Color = 65535
For i = 1 To colcfunc1.Count
For j = 1 To colcfunc2.Count
row = FirstRow + i - 1
If StrComp(Trim(colcfunc1(i)), Trim(colcfunc2(j)), 1) = 0 Then
With ActiveSheet.Cells(row, Selection.Column).Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
If row = LastRow Then
row = FirstRow + i - 1
End If
Next
Next
End Sub
使い方
使い方は簡単です。エクセルのVBAに上記のコードをまるごと入れます。下の画面の出し方がわからない人は「エクセルの開発タブの出し方」とかでぐぐってみてください。簡単に説明すると、ファイル→オプション→リボンのユーザー設定で開発というリボンにチェックを入れることで下の画面に行けるようになります。
そしたら上のマクロが使えるようになります。例えば、以下のように比較したいデータ群1とデータ群2があるとします。このとき、比較するデータ群は下の画像みたいに必ず隣接するようにしてください。
そしたら下のように、一番下+1つ下の行まで選択します。
選択した状態で、開発タブのマクロってところを押します。押すと下の画像のような画面がでるので、このなかの「Sheet1.ConparisonData」っていうマクロを実行します。ちなみに「Sheet1」の部分はシートの名前によって変化するので、必ずしもこの通りの名前だとは限りません。シートの名前によっては「Sheet3.ComparisonData」かもしれないし、「俺のシート.ComparisonData」かもしれません。
そうすると下のように「データ群1にだけしかないデータ」がハイライトされます。「データ群1にはあるけどデータ群2にはないデータがハイライトされる」と言い換えてもいいでしょう。
さらにデータを入れ替えて実行すれば。。。
今度は「データ群2にはあるけどデータ群1にはないデータ」がハイライトされます。
このように、2つのデータを比較し、どこの項目が違うのかを瞬時に教えてくれます。比較結果を見ると、「s, x」は2つのデータ群が両方とも持っているけど、「a, b, c, d」はデータ群2しか持ってなくて、「z, w」はデータ群1しか持ってないみたいですね。
まあこの例みたいに高々10個程度の要素を持つ2つのデータの集合同士を比較するとかなら人力で地道に数えてもいいんだけど、500個とか1000個のデータを比較するとかだと人力じゃとても終わらないからね。。。なので自動的にやってくれるプログラムを作ってみました。