言語化が出来ません…
始まり
前提条件
シート「Sheet1」の「A1」を含むアクティブな表がある
シート「Sheet2」の「A1」を含む表は1項目が4列使っている
Sheet1の表のセル範囲の各行を順に見て行く
各行の2つ目のセルから最後まで、各セルを順に見ていく
もし、各セルの値が空白でないなら、その時は、
Sheet2の表の範囲について
行の位置の取得=その1列目のどの行にあるかMatch関数で検索
列の位置の取得=(各セルの列番号-2)×4+2
その表のうちのセル範囲(行の位置,列の位置)を塗潰す
次のセル
次の行
終り
これをVBA語に翻訳すると、
ExcelVBA
1Option Explicit
2
3'始まり
4Sub test()
5
6'
7'前提条件
8' シート「Sheet1」の「A1」を含むアクティブな表がある
9Dim rngOld As Range: Set rngOld = Worksheets("Sheet1").Range("A1").CurrentRegion
10' シート「Sheet2」の「A1」を含む表は1項目が4列使っている
11Dim rngNew As Range: Set rngNew = Worksheets("Sheet2").Range("A1").CurrentRegion
12Const cmyNum As Long = 4
13'
14Dim r As Range
15'Sheet1の表のセル範囲の各行を順に見て行く
16For Each r In rngOld.Rows
17' 各行の2つ目のセルから最後まで、各セルを順に見ていく
18 Dim ix As Long
19 Dim ixRow As Long
20 Dim ixCol As Long
21 Dim c As Range
22 For ix = 2 To r.Columns.Count
23' もし、各セルの値が空白でないなら、その時は、
24 Set c = r.Cells(ix)
25 If c.Value <> Empty Then
26' Sheet2の表の範囲について
27 With rngNew
28' 行の位置の取得 = その1列目のどの行にあるかMatch関数で検索
29 ixRow = WorksheetFunction.Match(c, .Columns(1), 0)
30' 列の位置の取得=(各セルの列番号-2)×4+2
31 ixCol = (ix - 2) * cCol + 2
32' その表のうちのセル範囲(行の位置,列の位置)を4列分拡張して塗潰す
33 .Cells(ixRow, ixCol).Resize(, cCol).Interior.Color = vbRed
34 End With
35 End If
36' 次の番号
37 Next
38'次の行
39Next
40'
41'終り
42End Sub
43
とりあえず、こんな感じですかね?
コンパイルも動作確認もしてないです。
どこかに論理の飛躍や説明の抜けがあるかも知れませんが、
この辺を叩き台に、組み立ててデバッグしてみてください。
参考になれば。