配列にこだわりがあるような印象を受けますが、
このケースでは必要性を私は感じないですね。
読み出しだけなら、直接セルからでもそんなに遅くないです。
同じセルに何度もアクセスしない様に工夫するのは当然。
'一例:
Dim dicT As Object, WsPR As Worksheet, ws As Worksheet, rng As Range
Set dicT = CreateObject("Scripting.Dictionary")
Set WsPR = Worksheets("給与")
With Intersect(WsPR.Rows(1), WsPR.UsedRange)
For r = 2 To .Columns.Count
If .Cells(1, r).Interior.Color = vbRed Then '給与のタイトルが赤なら
dicT(.Cells(1, r).Value) = Empty '赤の項目名を登録
End If
Next
End With
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "給与" Then
Set rng = Intersect(ws.Rows(1), ws.UsedRange)
rng.Offset(, 1).Interior.Color = xlNone '事前無色化
For c = 2 To rng.Columns.Count
If dicT.exists(rng(1, c).Value) Then '給与の赤見出しと各シート見出しが一致
If rng4 Is Nothing Then
Set rng4 = rng(1, c)
Else
Set rng4 = Union(rng4, rng(1, c))
End If
End If
Next c
rng4.Interior.Color = vbRed
Set rng4 = Nothing
End If
Next ws