このコードを追加すると
Sub ApplyFormatting()
CopyFormat Range("A3:A10"), Range("A1")
CopyFormat Range("B3:B10"), Range("B1")
CopyFormat Range("C3:C10"), Range("C1")
CopyFormat Range("D3:D10"), Range("D1")
End Sub
Sub CopyFormat(dest As Range, copyfrom As Range)
dest.Interior.Color = copyfrom.Interior.Color
End Sub
ワークシートのコード領域に、ほぼ必要なことを実行するシンプルなツールがあります。唯一のことは、ApplyFormatting
どこかでサブルーチンを呼び出さなければならないということです。たとえば、最初の行の色が同じワークシートのどこかのセルの値に依存している場合は、そのシートのWorksheet_Changeイベントを使用できます。
Private Sub Worksheet_Change(ByVal Target As Range)
ApplyFormatting
End Sub
このイベントは、セルの値が変更された場合にのみ、一部のセルの背景色の変更によって直接トリガーされるわけではないことに注意してください。あなたの場合はそれで十分かもしれませんが、最初の行が正確にどのようにフォーマットされているかを教えてくれなかったので、私は推測することしかできません。
編集:あなたのコメントに:範囲の指定をハードコーディングする必要はありません。上記はフォーマットをコピーする方法を示すための単なる例です。
これをシート全体に適用するソリューションは、次のようになります。
Sub ApplyFormatting()
Dim maxRow As Long, maxCol As Long, col As Long
maxRow = Cells.SpecialCells(xlCellTypeLastCell).Row
maxCol = Cells.SpecialCells(xlCellTypeLastCell).Column
For col = 1 To maxCol
CopyFormat Range(Cells(3, col), Cells(maxRow, col)), Cells(1, col)
Next
End Sub
これを実際のシートの行/列に制限/適合させる必要があるかもしれませんが、一般的な考え方を理解していただければ幸いです。