VBAを使用するとファイルを比較して、どこのセルが異なっているかを調べることができます。
この記事を読むことで、次の動画のようなことができるようになります。

このように、比較対象のファイルのSheet1と異なる値のセルの背景色が赤色になります。
ではさっそくいってみましょう。
今回行うこと
2つのファイルのSheet1を比較して、異なる値のセルを赤色にします。以下の例では赤丸の部分の値が異なっています。

異なる値のセルに色を塗るプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Sub searchDiff() ' 比較対象のファイルを選択する targetFilePath = Application.GetOpenFilename() ' ファイルが選択されなかった場合は処理を終了する If targetFilePath = False Then Exit Sub ' 選択したファイルを開く Set targetFile = Workbooks.Open(targetFilePath) ' 選択したファイルは非表示とする Windows(targetFile.Name).Visible = False ' 選択したファイルの1番目のシートを変数に入れる Set targetSheet = targetFile.Worksheets(1) ' 1行目から10行まで繰り返し For i = 1 To 10 ' 1列目からJ列まで繰り返し For j = 1 To 10 ' 値が異なる場合 If Cells(i, j).Value <> targetSheet.Cells(i, j).Value Then ' セルを赤色にする Cells(i, j).Interior.Color = vbRed End If Next Next ' 保存確認しない状態にする Application.DisplayAlerts = False ' 比較対象のファイルを閉じる targetFile.Close ' 保存確認する状態に戻す Application.DisplayAlerts = True End Sub |
解説
ではこのプログラムを解説していきます。

まずはApplication.GetOpenFilename()でユーザに比較対象のファイルを選択させています。この関数により[ファイルを開く]ダイアログボックスが表示されます。ファイルが選択されなかった場合は処理を終了します。
GetOpenFilename (FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
FileFilter | ユーザが選択できるファイルの種類を指定します。(複数指定可能、省略可能) 【例】FileFilter:=”Excelファイル,*.xls*,Csvファイル,*.csv” |
FilterIndex | FileFilterで指定したもののうち、どれをデフォルトにするか指定します。 【例】FilterIndex:=2 の場合、上の例でCsvファイル(*.csv)がデフォルトになります。 |
Title | ダイアログボックスのタイトルです。省略すると「ファイルを開く」になります。 |
ButtonText | Macintoshでのみ指定します。筆者は試したことがありません。 |
MultiSelect | ファイルを複数選択する場合はTrueを設定します。 複数のファイルをまとめて処理する場合に使用します。 【例】MultiSelect:=True |
選択したファイルの文字列が返されます。
ファイルが選択されなかった場合はFalseが返されます。

Workbooks.Openにより選択されたファイルを開いています。ファイルを開いた直後にVisible=Falseを指定することによりファイルを非表示にしています。そして開いたファイルの1番目のシートを変数に入れています。

For i = 1 to 10 により、変数 i は1から10まで1ずつ増加します。
For j = 1 to 10 により、変数 j は1から10まで1ずつ増加します。
こうすることにより、ひとつずつセルを調べることができます。

そして次の部分では、作業中のエクセル(つまり前面に出ているエクセル)※今回はマクロを実行しているエクセルと最初に選択したエクセルの値を比較しています。

<>は異なっているという意味です。つまりセルの値が違う場合には25行目の処理が実行されます。
セルの背景色つまりインテリアの色を赤にするという意味です。

そして最後に非表示で開いていたエクセルを閉じます。

Application.DisplayAlerts = False によって、次のメッセージを表示することなくエクセルを閉じることができます。

Application.DisplayAlerts = True とすることでメッセージの設定を元に戻しています。
実行結果
では実行してみましょう!

マクロを実行しているエクセルと、最初に選択したエクセルの値が異なるセルが赤色になりました!
さいごに
いかがだったでしょうか。
今回は2つのファイルの異なる部分を調べる方法をご紹介しました。
これにより皆さんの業務が時短できることを願っています。
今後もこのようなプログラムをご紹介していきますので、よろしくお願いいたします。
コメント