VBATips

「シートで指定したセル範囲の比較処理」をパーツ化する【ExcelVBA】

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。
処理はパーツ単位で分ける事を心掛けましょう。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

'■指定範囲を比較し、差異があれば背景色を赤色にする
Public Function call_compare(ws1 As Worksheet, rng1 As Range, ws2 As Worksheet)
    Dim i As Long, j As Long
    
    Dim sRow As Long, sCol As Long
    Dim eRow As Long, eCol As Long
        
    '■rng(Rangeオブジェクト)を分解
    sRow = rng1.Row
    sCol = rng1.Column
    eRow = rng1.Row + rng1.Rows.Count - 1
    eCol = rng1.Column + rng1.Columns.Count - 1

    '■開始セルから終了セルまでループさせる
    For i = sRow To eRow
        For j = sCol To eCol
            '■ws1とws2で値が異なれば、背景色を赤色にする
            If ws1.Cells(i, j).Value <> ws2.Cells(i, j).Value Then
                    ws2.Cells(i, j).Interior.ColorIndex = 3
            End If
        Next
    Next
End Function

使い方

上記をお好きなモジュール内にコピペしてください。
実際に使用する時は以下のような形で使用してください。

Public Sub test()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    
    Set ws1 = ActiveWorkbook.Worksheets(1)'ActiveWorkbookの1枚目のシート
    Set ws2 = ActiveWorkbook.Worksheets(2)'ActiveWorkbookの2枚目のシート

    Call call_compare(ws1, Range("A2:H20"), ws2)
End Sub

結果イメージ

指定した範囲でセルの値が異なれば、背景色を赤色にします。
出力データが、手動で行ったデータと一致しているかどうか一目でわかります。

注意点

  • 背景色のColorIndexに関しては、こちら参照してください。
  • Set wsの表記に関しては、こちら参照してください。

本コードは以下のような形で使用します。

■使用例
・既存のマクロのリファクタリング作業(結果が同一かをチェックする)
・人力で作っていた表と、マクロで実装した表とで結果が異ならないかチェックする

コメント

タイトルとURLをコピーしました