シートの色変更
「タブ色で見やすくする」「一括で色付け」「状況で色分け」——初心者でも迷わず使えるコードと安全テンプレートで、失敗しやすいポイントまでまとめます。シートのタブ色は Worksheet.Tab の Color/ColorIndex/ThemeColor で設定します。
基本:1枚のシートタブ色を変える/戻す
Sub SheetColor_Basic()
'タブ色を赤に(RGB指定)
ThisWorkbook.Worksheets("売上").Tab.Color = RGB(255, 0, 0)
'タブ色を黄色に(ColorIndex指定:パレット番号)
ThisWorkbook.Worksheets("在庫").Tab.ColorIndex = 6
'タブ色をテーマ色に(Officeのテーマに追随)
ThisWorkbook.Worksheets("顧客").Tab.ThemeColor = xlThemeColorAccent1
'タブ色をなしに戻す(標準のグレー)
ThisWorkbook.Worksheets("設定").Tab.ColorIndex = xlColorIndexNone
End Sub
VB- ポイント:
- RGB: 細かい色指定に最適。
- ColorIndex: 56色パレットの番号。環境で色の中身が変わる可能性あり。
- ThemeColor: テーマ変更に追随したいときに便利。
- 色なし:
xlColorIndexNoneで標準表示へ。
一括で色付け/クリア
Sub ColorAllSheets()
Dim s As Object
For Each s In ThisWorkbook.Sheets
s.Tab.Color = RGB(0, 120, 215) 'Office系ブルー
Next
End Sub
Sub ClearAllSheetColors()
Dim s As Object
For Each s In ThisWorkbook.Sheets
s.Tab.ColorIndex = xlColorIndexNone
Next
End Sub
VB- ポイント:
- Sheets: グラフシートも含む。ワークシートだけなら
Worksheetsに変更。 - クリア: 一度全色を「なし」に戻すと管理しやすい。
- Sheets: グラフシートも含む。ワークシートだけなら
条件で色分け(名前・可視状態・保護状態)
Sub ColorByRules()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'トップページは緑
If ws.Name = "トップ" Then
ws.Tab.Color = RGB(0, 176, 80)
'「_tmp」を含む一時系はグレー
ElseIf InStr(1, ws.Name, "_tmp", vbTextCompare) > 0 Then
ws.Tab.Color = RGB(191, 191, 191)
'VeryHiddenは色なし(視認不要)
ElseIf ws.Visible = xlSheetVeryHidden Then
ws.Tab.ColorIndex = xlColorIndexNone
'保護されているシートはオレンジ
ElseIf ws.ProtectContents Then
ws.Tab.Color = RGB(255, 192, 0)
'それ以外は青系
Else
ws.Tab.Color = RGB(0, 112, 192)
End If
Next
End Sub
VB- ポイント:
- 揺れに強い: 部分一致で命名規則に合わせて色分け。
- 可視状態・保護状態: 実務で役立つ判断軸。
安全テンプレート:色名→RGB に変換して使う
Function ColorFromName(name As String) As Long
Select Case LCase$(Trim$(name))
Case "red", "赤": ColorFromName = RGB(255, 0, 0)
Case "green", "緑": ColorFromName = RGB(0, 176, 80)
Case "blue", "青": ColorFromName = RGB(0, 112, 192)
Case "orange", "オレンジ": ColorFromName = RGB(255, 192, 0)
Case "gray", "灰": ColorFromName = RGB(191, 191, 191)
Case "purple", "紫": ColorFromName = RGB(112, 48, 160)
Case Else: ColorFromName = RGB(0, 120, 215) 'デフォルト
End Select
End Function
Sub ColorByControlList()
'Control!A:B に「シート名」「色名」を書いておく
Dim ctrl As Worksheet, last As Long, r As Long, nm As String, cn As String, ws As Worksheet
Set ctrl = ThisWorkbook.Worksheets("Control")
last = ctrl.Cells(ctrl.Rows.Count, "A").End(xlUp).Row
For r = 2 To last
nm = CStr(ctrl.Cells(r, "A").Value)
cn = CStr(ctrl.Cells(r, "B").Value)
On Error Resume Next
Set ws = ThisWorkbook.Worksheets(nm)
On Error GoTo 0
If Not ws Is Nothing Then
ws.Tab.Color = ColorFromName(cn)
End If
Set ws = Nothing
Next
MsgBox "Controlの指定に従って色を設定しました。"
End Sub
VB- ポイント:
- 管理しやすい: 一覧シートから色指定すれば運用負担が減る。
- 未知の色名: 未定義は既定色にフォールバック。
応用:16進カラーコード(#RRGGBB)対応
Function RGBFromHex(hex As String) As Long
Dim s As String: s = Replace$(Trim$(hex), "#", "")
If Len(s) <> 6 Then RGBFromHex = RGB(0, 0, 0): Exit Function
RGBFromHex = RGB(CLng("&H" & Left$(s, 2)), CLng("&H" & Mid$(s, 3, 2)), CLng("&H" & Right$(s, 2)))
End Function
Sub ColorFromHexList()
'Control!A:B に「シート名」「#RRGGBB」を書く
Dim ctrl As Worksheet, last As Long, r As Long, ws As Worksheet
Set ctrl = ThisWorkbook.Worksheets("Control")
last = ctrl.Cells(ctrl.Rows.Count, "A").End(xlUp).Row
For r = 2 To last
On Error Resume Next
Set ws = ThisWorkbook.Worksheets(CStr(ctrl.Cells(r, "A").Value))
On Error GoTo 0
If Not ws Is Nothing Then
ws.Tab.Color = RGBFromHex(CStr(ctrl.Cells(r, "B").Value))
End If
Set ws = Nothing
Next
End Sub
VB- ポイント:
- Web色対応: デザイン指定をそのまま使える。
- 入力検証: 不正コードは黒にフォールバック(必要に応じて変更可)。
例題で練習
例題1:重要度で信号カラー(赤・黄・緑)
Sub TrafficLightTabs()
'重要:赤、注意:黄、通常:緑
ThisWorkbook.Worksheets("重要").Tab.Color = RGB(255, 0, 0)
ThisWorkbook.Worksheets("注意").Tab.Color = RGB(255, 192, 0)
ThisWorkbook.Worksheets("通常").Tab.Color = RGB(0, 176, 80)
End Sub
VB- ポイント:
- 視認性抜群: ひと目で優先度が分かる。
例題2:週報を交互色で見やすく
Sub AlternateWeeklyColors()
Dim i As Long, ws As Worksheet, n As Long
n = ThisWorkbook.Worksheets.Count
For i = 1 To n
Set ws = ThisWorkbook.Worksheets(i)
If Left$(ws.Name, 3) = "週報" Then
If i Mod 2 = 0 Then
ws.Tab.Color = RGB(0, 112, 192) '青
Else
ws.Tab.Color = RGB(191, 191, 191) 'グレー
End If
End If
Next
End Sub
VB- ポイント:
- 交互色: 並びの識別がしやすくなる。
例題3:可視ワークシートだけテーマ色で統一
Sub ThemeColorVisibleSheets()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then
ws.Tab.ThemeColor = xlThemeColorAccent2
End If
Next
End Sub
VB- ポイント:
- テーマ整合: 会社の配色ルールに合わせやすい。
実務の落とし穴と対策
- 色が違って見える問題:
- 対策: ColorIndexは環境のパレットに依存。意図通りの色にしたいならRGBを使う。
- テーマ変更で色ズレ:
- 対策: 変化を許容したいならThemeColor、固定色にしたいならRGB。
- 非表示・VeryHiddenの扱い:
- 対策: 非表示でも色は設定できるが、整理目的なら「色なし」に戻すほうが分かりやすい。
- 対象の混同(Sheets/Worksheets):
- 対策: グラフも含めるならSheets、ワークシート限定ならWorksheetsに統一。
- 命名や存在チェックを忘れる:
- 対策: 操作前に対象シートの存在確認(TryGetで安全取得)を癖にする。
次の一歩(小課題)
- 課題1: Controlシートに「シート名」「#RRGGBB」を並べ、指定色で一括設定。
- 課題2: 「売上」「在庫」「顧客」を赤・黄・緑で固定、その他はテーマ色で統一。
- 課題3: 保護中はオレンジ、解除中は青に自動切替するトグルマクロを作成。
