やりたいこと
給与データと勤怠データの比較をして異なるセルがある場合給与データのセルが赤くなるようなコードを組んであります。
問題は比較して異なるセルがない場合、エラーになってしまいます。
この場合、どの辺りを修正するべきなのでしょうか。
不一致がある場合はセルを赤くするというコードなのでそもそも一致している場合は何も起こらないと思ったのですが、実行時エラー91 オブジェクト変数またはwithブロック変数が設定されていません。と出てしまいます。
rng3.Interior.Color = vbRed
最後のこちらの部分でエラーが出てしまいます。
Option Explicit
Public Sub 比較()
Sheets("給与データ").Cells.ClearFormats
Sheets("勤怠データ").Cells.ClearFormats
Dim lastrow As Long
Dim lastcolumn As Long
lastrow = Sheets("勤怠データ").Cells(Rows.Count, 1).End(xlUp).Row
lastcolumn = Sheets("勤怠データ").Cells(6, Columns.Count).End(xlToLeft).column
Dim rng1 As Range, rng2 As Range
Set rng1 = Sheets("勤怠データ").Range("A5", Sheets("勤怠データ").Cells(lastrow, lastcolumn))
Set rng2 = Sheets("給与データ").Range("A1").CurrentRegion
Dim ary1() As Variant, ary2() As Variant
ary1 = rng1.Value
ary2 = rng2.Value
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
Dim r As Long, c As Long
For r = 2 To UBound(ary1) '受入データ 2行目から最終行まで配列に格納
For c = 3 To UBound(ary1, 2) '受入データ 3列目から最終列まで配列に格納
dic(ary1(r, 2) & " " & ary1(1, c)) = ary1(r, c) '受入データkey社員番号と受入コードに紐づいた数値をitemとして配列に格納
Next
Next
Dim rng3 As Range
For r = 2 To UBound(ary2)
For c = 2 To UBound(ary2, 2)
If dic.Exists(ary2(r, 1) & " " & ary2(1, c)) Then 'dicに格納した社員番号と受入コードが元データと一致しているか
If dic(ary2(r, 1) & " " & ary2(1, c)) <> ary2(r, c) Then '受入データの配列に格納したデータと元データの数値に不一致があるか
If rng3 Is Nothing Then
Set rng3 = rng2.Cells(r, c) 'rngが空白の場合エラーになるためunionを使用しない
Else
Set rng3 = Union(rng3, rng2.Cells(r, c)) '不一致のセルをまとめてrng3に格納
End If
End If
End If
Next
Next
rng3.Interior.Color = vbRed
MsgBox "差分をチェックしました"
End Sub