VBAで楽してシートを比較しよう

『VBA』をマスターすればExcelでいろいろ便利なことができるらしいが、どこから手を付けてよいか分からない、と思っている方は多いと思います。また、何ができるのか分からないから、便利と言われてもピンと来ない方も多いのではないでしょうか。

Excel VBAでシートを比較する

ここで紹介する例は、2つのシートを比較するVBAのプログラムです。ひとつのブックに同じ項目のシートを時系列で並べてお使いになっている方は多いと思います。見比べるためには、同時に2つのシートを並べる方法もありますが、どこが違っているか表示してくれると便利ではないでしょうか。

例えば、画面1のようなシートがあるとします。野菜の価格の一覧表ですが、日によって同一のシートを扱っているような場合、変更された項目を手っ取り早く表示させることができたら便利ですよね。

画面1
画面1

VBAでよくある例題では、値が違っているセルの背景色を変更したり、文字を太字や斜体にしますが、実際に背景色を変更してしまうと、プリントアウトしたりする時に不便ですし、何より違っていることが分かっても、どのように違うかが分かりません。

そこで、ここで紹介する例では、値が違っているセルにコメントとして異なっている値を設定するようにします。コメントが設定されると、セルの右上に赤い三角マークがつくのですぐに分かります。セルにカーソルを移動すると値を見ることができます。また、セルの範囲を選択して「コメントの削除」を選ぶことによって簡単に消去することができます。印刷時にも邪魔になりません。

実際に実行したところが画面2になります。カーソルを持っていくとコメントがポップアップして内容を確認することができるのが分かります。

画面2
画面2

VBAのプログラムを入力する

VBAのプログラムを入力するには、どのバージョンのExcelの場合も[Alt]キーを押しながら ⁠F11]キーを押してください。すると画面3のような画面が表示されます。まだプログラムを入力していないので、右側のウィンドウは空の状態です。

画面3
画面3

ここで「プロジェクト」と書かれたウィンドウの中のSheet1のところをダブルクリックしてください。これでSheet1へプログラム入力する準備ができました。ここに下記のリストを入力してください。空白の部分は、必ず半角のスペースを入れてください。

実行するには、一番上の行の「Sub hikaku()」のところにカーソルを移動し[F5]を押すだけです。

リスト
Sub hikaku()
    Dim RETSU_S, RETSU_E, GYOU_S, GYOU_E As Integer
    RETSU_S = 2 '列をBから
    RETSU_E = 6 '列をFまで
    GYOU_S = 3  '行を3から
    GYOU_E = 12 '行を12まで
    
    Dim s1, s2 As Worksheet 'Worksheetsオブジェクト用
    Set s1 = Worksheets("3月1日調査") '比較元シート名
    Set s2 = Worksheets("2月28日調査") '比較先シート名
    
    Dim r1 As Range 'Rangeオブジェクト用
    
    Dim retsu, gyou As Integer 'この変数で列と行を指定する
    
    For retsu = RETSU_S To RETSU_E
        For gyou = GYOU_S To GYOU_E
            If s1.Cells(gyou, retsu).Value <> s2.Cells(gyou, retsu).Value Then
                Set r1 = s1.Cells(gyou, retsu)
                If TypeName(r1.Comment) = "Nothing" Then r1.AddComment
                r1.Comment.Text Text:=CStr(s2.Cells(gyou, retsu).Value)
            End If
        Next
    Next
End Sub

プログラムの説明

今回紹介するプログラムは、なるべく汎用的に利用できるように工夫してあります。3~6行目には、Excelの行と列の「どこからどこまで」を数字で指定している部分があります。範囲が広い場合には、この数字を変更してください。

8~9行目には、比較するシートの名前を指定しているところがあります。この部分を比較したいシートに変更してください。

ちょっと難しそうに感じますが、列と行でしらみつぶしに内容を比較し、違っていた場合に比較先シートのセルの内容をコメントにセットしています。既にコメントが追加されていない場合には、コメントの追加もしているのがミソです。

急ぎ足で説明しましたが、例えば連続してコメントを入れたい場合などにも応用が利くと思います。これを元にいろいろ変更して試してみてください。