次のようにスプレッドシートを設定しています。
1 Basic Rota 09:00 13:00
2 Absence S
列ラベルが「基本勤務表」の上から A、B、C として始まると想像すると、不在セル (B2:C2) は結合されたセルで、「H」、「S」、「T」、「SC」のいずれかを含むことができます。または空にすることもできます。そのセルの内容に基づいて、B1 と C1 の色が変わるはずです。私は仕事をするVBAを少し持っています。
Option Compare Text 'A=a, B=b, ... Z=z
Option Explicit
Private Sub Worksheet_Change(ByVal Selection As Range)
Select Case Target.Value
Case "S"
Target.MergeArea.Offset(-1, 0).Interior.ColorIndex = 53
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = 53
Target.MergeArea.Offset(-1, 0).Font.ColorIndex = 53
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Font.ColorIndex = 53
Case "H"
Target.MergeArea.Offset(-1, 0).Interior.ColorIndex = 50
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = 50
Target.MergeArea.Offset(-1, 0).Font.ColorIndex = 50
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Font.ColorIndex = 50
Case "T"
Target.MergeArea.Offset(-1, 0).Interior.ColorIndex = 44
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = 44
Target.MergeArea.Offset(-1, 0).Font.ColorIndex = 44
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Font.ColorIndex = 44
Case "SC"
Target.MergeArea.Offset(-1, 0).Interior.ColorIndex = 42
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = 42
Target.MergeArea.Offset(-1, 0).Font.ColorIndex = 42
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Font.ColorIndex = 42
Case Else
Target.Offset(-1, 0).Interior.ColorIndex = xlNone 'No Fill
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = xlNone
End Select
End Sub
ただし、結合されたセル (B2:C2) の内容が削除されると、「ケース "S"」の行でエラー (実行時エラー '13': タイプの不一致) が表示されます。「On Error GoTo」行で回避できますが、条件付きで書式設定されたセルが「塗りつぶしなし」に戻されないことを意味します。これは、結合されていないセルで行われる場合は問題にならないため、結合されたセルをすべて一緒に使用するのをやめる必要があるかもしれません - ただし、使いやすさのために、それを維持するのが良いでしょう (ユーザーが B2 と C2 に「H」を 2 回入力した場合など)。参考までに、これは Excel 2003 の場合です。ワークシートのコードを表示することでマクロがワークシートに追加され、worksheet_change に基づいていることを付け加えておきます。
誰かがこれを手伝ってくれるなら、それは大歓迎です!
編集: @Philip A Barnes の回答に基づく以下の回答。
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Columns(1).Value
Case Empty
Target.Columns(1).MergeArea.Offset(-1, 0).Interior.ColorIndex = xlNone 'No Fill
Target.Columns(1).MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = xlNone
Case "S"
Target.MergeArea.Offset(-1, 0).Interior.ColorIndex = 53
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = 53
Target.MergeArea.Offset(-1, 0).Font.ColorIndex = 53
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Font.ColorIndex = 53
Case "H"
Target.MergeArea.Offset(-1, 0).Interior.ColorIndex = 50
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = 50
Target.MergeArea.Offset(-1, 0).Font.ColorIndex = 50
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Font.ColorIndex = 50
Case "T"
Target.MergeArea.Offset(-1, 0).Interior.ColorIndex = 44
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = 44
Target.MergeArea.Offset(-1, 0).Font.ColorIndex = 44
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Font.ColorIndex = 44
Case "SC"
Target.MergeArea.Offset(-1, 0).Interior.ColorIndex = 42
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = 42
Target.MergeArea.Offset(-1, 0).Font.ColorIndex = 42
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Font.ColorIndex = 42
Case Else
Target.Offset(-1, 0).Interior.ColorIndex = xlNone 'No Fill
Target.MergeArea.Offset(-1, 1).Offset(0, -1).Interior.ColorIndex = xlNone
End Select
End Sub