パーツ化とは
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
結果イメージ
指定した範囲でセルの値が異なれば、背景色を赤色にします。
出力データが、手動で行ったデータと一致しているかどうか一目でわかります。
注意点
本コードは以下のような形で使用します。
コメント