こんにちは。KenKen_SP です。
> マクロで設定する方法も試みましたが...
こんな感じで、いけるかと。ただし、セルの値に変化があると一々
チェックするという安直な方法ですし、何だか自分でもコードを書
いてて「効率の悪いコードだなぁ」と思ってしまうものです。
パフォーマンスは悪いです。
でも、他に方法が思いつかないのでアップします(^^;)
下記のコードのままですと、全部のセルが判定対象ですが、本当は
判定が必要なセル範囲を限定させた方が良いでしょうね。
次行以下をシートモジュールに貼り付けて下さい。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strGroup(5) As String
Dim idxGroup(5) As Long
Dim aryTmp As Variant
Dim lngColorIdx As Long
Dim rngCell As Range
Dim i As Long, j As Long
'ここを書き換えて下さい===========================
'strGroup と idxGroup は2つで1セット
strGroup(0) = "会社01,会社02,会社03,会社04,会社05"
idxGroup(0) = 3 '赤
strGroup(1) = "会社06,会社07,会社08,会社09,会社10"
idxGroup(1) = 5 '青
strGroup(2) = "会社11,会社12,会社13,会社14,会社15"
idxGroup(2) = 46 'オレンジ
strGroup(3) = "会社16,会社17,会社18,会社19,会社20"
idxGroup(3) = 13 '紫
strGroup(4) = "会社21,会社22,会社23,会社24,会社25"
idxGroup(4) = 9 '茶
strGroup(5) = "会社26,会社27,会社28,会社29,会社30"
idxGroup(5) = 10 '緑
'==================================================
'ディフォルトフォント色
lngColorIdx = 0
Application.ScreenUpdating = False
'Target が複数セルでもループして処理
For Each rngCell In Target
'グループ数だけループ
For i = 0 To UBound(strGroup)
'strGroup(i)を配列にバラす
aryTmp = Split(strGroup(i), ",")
'Target.Value と比較
For j = 0 To UBound(aryTmp)
If Trim$(rngCell.Value) = aryTmp(j) Then
'一致したらidxGroup(i)がフォント色
lngColorIdx = idxGroup(i)
End If
Next j
Erase aryTmp
Next i
'フォント色変更
rngCell.Font.ColorIndex = lngColorIdx
Next rngCell
End Sub
お礼
教えていただいた構文を使ってうまくできました! ありがとうございました。