VBAで塗りつぶしなしにする方法|セル色も取得・変更

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
アイキャッチ

サクッと結論

VBAでセルを塗りつぶしなしにするなら、まずは次の1行です。

Range("A1").Interior.ColorIndex = xlNone

公式表記に寄せるなら xlColorIndexNone です。どちらも「色なし」を表す値として使えます。
Interior はセルの内側を表す入口、.Color はRGBで色を付ける・取得するプロパティ、.ColorIndex は色番号や塗りつぶしなしを扱うプロパティです。初心者のうちは、この3つを分けて見てください。

Excelで「セルの色を消したい」「背景色をクリアしたい」「色付きセルだけ数えたい」と思って検索すると、Interior.ColorColorIndexxlNoneRGB が一気に出てきます。

この記事では、最初に塗りつぶしなしのコードを出します。そのあとで、色を付ける、色を取得する、色名を判定する、特定の色を数える、点数によって色分けするところまでまとめます。

このページだけで、背景色を消すところから、色を付ける・取得する・実務で使うところまで確認できるように整理しています。

項目目安
よく使う度
難しさ
実務重要度
この記事の探し方

最初は、今やりたい操作から選んでください。リンク先で何が分かるかも一緒に確認できます。

スクロールできます
今やりたいこと見る場所
セルを今すぐ塗りつぶしなしにしたいVBAでセルの塗りつぶしをなしにする方法
Interior.Colorでセルに色を付けたいInterior.Colorでセルの色を変更・取得する方法
セルの色を取得してRGBや色名を調べたいInterior.ColorでRGB値と色名を取得する
ColorIndexの色番号や塗りつぶしなしの番号を確認したいColorIndexで色番号を指定する方法と一覧
条件付き書式の色が取れなくて困っているInterior.Colorを使う実務例と注意点
この記事で実際に確認したこと

この記事では、Microsoft Learnの公式情報だけでなく、Excelで実際にセルへ色を付けてから、ColorIndex = xlNonexlColorIndexNonexlPatternNoneRGB(255,128,64) の戻り値を確認しています。

スクロールできます
確認した内容確認結果記事での使い方
塗りつぶしなしに戻すコードColorIndex = -4142Pattern = -4142 になることを確認最初に出す基本コードの根拠
.Color.ColorIndex の役割色を付ける・取得する処理と、色なしに戻す処理を分けて確認初心者が迷いやすい使い分けの整理
RGB(255,128,64) の値今回の環境では 4227327現行記事の数値を検証値に合わせて修正
目次

VBAでセルの塗りつぶしをなしにする方法

急いでいる場合は、この章だけで大丈夫です。1セル、範囲、行、列、シート全体で背景色をクリアするコードを先にまとめます。

1セル・範囲・行列・シート全体をクリアする

1セルだけ塗りつぶしなしにするコード

Sub RemoveCellColor()
    Range("A1").Interior.ColorIndex = xlNone
End Sub

Range("A1") が対象セルです。A1以外を消したいときは、ここを Range("B2") のように変えます。

スクショでは、実行後にセルの背景色だけが消えているところを見てください。値や罫線まで消したい場合は別のメソッドを使うため、ここでは「色だけを戻す」処理として分けています。

VBAでセルを塗りつぶしなしにする実行結果
VBAでセルを塗りつぶしなしにする実行結果

範囲をまとめて塗りつぶしなしにするコード

Sub RemoveRangeColor()
    Range("A1:E2").Interior.ColorIndex = xlNone
End Sub

行をまとめて塗りつぶしなしにするコード

Sub RemoveRowColor()
    Rows("1:5").Interior.ColorIndex = xlNone
End Sub

列をまとめて塗りつぶしなしにするコード

Sub RemoveColumnColor()
    Columns("A:E").Interior.ColorIndex = xlNone
End Sub

アクティブシート全体の塗りつぶしをクリアするコード

Sub RemoveAllCellColors()
    Cells.Interior.ColorIndex = xlNone
End Sub

ここでの Cells は、今操作しているシートの全セルです。ブック内の全シートではありません。特定のシートを確実に処理したい場合は、次のようにシート名まで指定します。

Sub RemoveSheetCellColors()
    Worksheets("Sheet1").Cells.Interior.ColorIndex = xlNone
End Sub
VBAでシート内のセル背景色をまとめてクリアした結果
VBAでシート内のセル背景色をまとめてクリアした結果

xlNoneとxlColorIndexNoneの違い

Microsoft LearnのInterior.ColorIndex プロパティでは、色はカラー パレットのインデックス、または xlColorIndexAutomatic / xlColorIndexNone で表すと説明されています。

つまり、公式ドキュメントの表記に寄せるなら次の書き方です。

Sub RemoveCellColorOfficialName()
    Range("A1").Interior.ColorIndex = xlColorIndexNone
End Sub

ただ、VBAのサンプルでは xlNone もよく使われます。この検証環境では、赤く塗ったセルに ColorIndex = xlColorIndexNone を設定しても、ColorIndex = xlNone 相当の値を設定しても、どちらも ColorIndex = -4142Pattern = -4142 になり、見た目は塗りつぶしなしに戻りました。

スクロールできます
書き方使いどころメモ
ColorIndex = xlNone短く書きたいとき多くのVBA例で見かける
ColorIndex = xlColorIndexNone公式名に寄せたいときMicrosoft LearnのXlColorIndex 列挙では「色なし」と説明されている
Pattern = xlPatternNoneパターンも含めてなしにしたいときXlPattern 列挙では「パターンなし」

この記事では、検索している人が見つけやすいように本文では xlNone を中心にし、根拠説明では xlColorIndexNone も併記します。

白く塗るのと塗りつぶしなしの違い

見た目だけなら、白で塗ったセルと塗りつぶしなしのセルは似ています。ただし、VBAで見ると意味が違います。

スクロールできます
状態見た目ColorIndexの考え方
白で塗る白い塗りつぶしがある色が設定されている
塗りつぶしなしセル本来の背景色なし

実務では、あとから「色が付いているセルだけ数える」「色が付いていないセルだけ処理する」といった判定をすることがあります。その場合、白く塗るより、必要なセルだけ ColorIndex = xlNone で本当に塗りつぶしなしへ戻す方が扱いやすいです。

検証では、未設定セルと ColorIndex = xlColorIndexNone で戻したセルは、どちらも ColorIndex = -4142 になりました。一方、赤や黄色で塗ったセルは Pattern = 1 となり、塗りつぶしが設定されている状態でした。

Interior.Colorでセルの色を変更・取得する方法

ここでは、Interior.Color だけに絞って説明します。Interior.Color は、RGB値でセルの色を付ける、またはセルの色を取得するときに使います。ColorIndex は次の章で別に扱います。

Microsoft LearnのRange.Interior プロパティでは、Rangeからセル内部を表すInteriorオブジェクトを返すと説明されています。Range("A1").Interior.Color のように、セルの内側に対して .Color を指定する流れです。

VBAで使うRGBカラー一覧
VBAで使うRGBカラー一覧
スクロールできます
書き方何を指すか役割
Range("A1").Interiorセルの内側・背景部分色を操作する入口
.ColorRGBの色値色を付ける、色を取得する

Interior.Colorでセルに色を付ける

RGBで赤く塗る

Sub SetCellColorByRgb()
    Range("A1").Interior.Color = RGB(255, 0, 0)
End Sub

Interior.Color は、セルの塗りつぶし色を取得・設定するプロパティです。Microsoft LearnのInterior.Color プロパティでも、RGB関数を使って色値を作る説明があります。

主要なRGBカラー & VBA定数一覧

色を選ぶときは、数字だけを見るより、色見本とコードを並べた方が分かりやすいです。まずは次の基本色を覚えておくと、実務の色分けコードを書きやすくなります。

スクロールできます
色見本RGB指定VBA定数使いどころ
RGB(255, 0, 0)vbRedエラー、要確認、期限超過
RGB(0, 255, 0)vbGreen完了、正常、合格
RGB(0, 0, 255)vbBlue入力欄、参照用、分類
黄色RGB(255, 255, 0)vbYellow注意、未入力、確認待ち
水色RGB(0, 255, 255)vbCyan補足、作業中、メモ
RGB(255, 0, 255)vbMagenta例外、特殊処理、目立たせたい箇所
灰色RGB(128, 128, 128)なし対象外、無効、処理しない行
RGB(255, 255, 255)vbWhite白で塗る。塗りつぶしなしとは別

Interior.ColorでRGB値と色名を取得する

セルの背景色を取得する場合も、Interior.Color を変数に入れます。戻り値はLong型の数値です。

Sub GetCellColor()
    Dim cellColor As Long
    Dim R As Long, G As Long, B As Long

    ' A1セルの背景色を取得
    cellColor = Range("A1").Interior.Color

    ' RGB値に分解
    R = cellColor Mod 256
    G = (cellColor \ 256) Mod 256
    B = (cellColor \ 65536) Mod 256

    MsgBox "A1セルの背景色:" & vbCrLf & _
           "RGB(" & R & ", " & G & ", " & B & ")"
End Sub

Microsoft LearnのRGB 関数では、赤・緑・青の各値は0から255の範囲で指定すると説明されています。RGB(255, 128, 64) を例にすると、Long値は次の計算になります。

(64 * 65536) + (128 * 256) + 255 = 4227327

この値は、今回のExcel検証でも Interior.Color = 4227327 として確認しました。

VBAでセル背景色をRGB値として取得した結果
VBAでセル背景色をRGB値として取得した結果

色名まで出したい場合は、RGB値を判定する関数を分けると読みやすくなります。赤かどうかの判定も、取得した colorName を使って同じSubの中で行います。

Sub GetCellColorName()
    Dim cellColor As Long
    Dim R As Long, G As Long, B As Long
    Dim colorName As String

    cellColor = Range("A1").Interior.Color

    R = cellColor Mod 256
    G = (cellColor \ 256) Mod 256
    B = (cellColor \ 65536) Mod 256

    colorName = GetColorName(R, G, B)

    If colorName = "赤" Then
        MsgBox "A1セルは赤です。" & vbCrLf & _
               "RGB(" & R & ", " & G & ", " & B & ")"
    Else
        MsgBox "A1セルは赤ではありません。" & vbCrLf & _
               "色名:" & colorName & vbCrLf & _
               "RGB(" & R & ", " & G & ", " & B & ")"
    End If
End Sub

Function GetColorName(ByVal R As Long, ByVal G As Long, ByVal B As Long) As String
    Select Case True
        Case R = 255 And G = 0 And B = 0
            GetColorName = "赤"
        Case R = 0 And G = 255 And B = 0
            GetColorName = "緑"
        Case R = 0 And G = 0 And B = 255
            GetColorName = "青"
        Case R = 255 And G = 255 And B = 0
            GetColorName = "黄色"
        Case R = 0 And G = 255 And B = 255
            GetColorName = "シアン(水色)"
        Case R = 255 And G = 0 And B = 255
            GetColorName = "マゼンタ(紫)"
        Case R = 0 And G = 0 And B = 0
            GetColorName = "黒"
        Case R = 255 And G = 255 And B = 255
            GetColorName = "白"
        Case Else
            GetColorName = "不明な色"
    End Select
End Function

If colorName = "赤" Then は単独で実行するコードではなく、colorName = GetColorName(R, G, B) の後に続けて書く判定部分です。上の完成版のように、1つのSubの中へ入れて使ってください。

VBAで取得したセル色から色名を判定した結果
VBAで取得したセル色から色名を判定した結果

Interior.Colorを使う実務例と注意点

値に応じてセル色を変える

点数やステータスに応じて色を変える場合は、Select Case を使うと読みやすくなります。

Sub ChangeCellColorByValue()
    Dim rng As Range
    Dim cell As Range

    Set rng = Range("A1:A10")

    For Each cell In rng
        If IsNumeric(cell.Value) Then
            Select Case CDbl(cell.Value)
                Case Is >= 80
                    cell.Interior.Color = RGB(0, 255, 0)      ' 80以上は緑
                Case Is >= 50
                    cell.Interior.Color = RGB(255, 255, 0)    ' 50以上80未満は黄色
                Case Else
                    cell.Interior.Color = RGB(255, 0, 0)      ' 50未満は赤
            End Select
        End If
    Next cell
End Sub

この例では、色を付ける処理を Interior.Color だけで書いています。空白セルや文字列セルの色を消したい場合は、前章の塗りつぶしなしコードを別処理として使う、と分けて考えると混乱しにくいです。

VBAで値に応じてセル背景色を変更した結果
VBAで値に応じてセル背景色を変更した結果

色付きセルをカウントする

赤く塗ったセルだけ数えたい場合は、対象範囲を1セルずつ見て、Interior.Color が目的の色と一致するか確認します。

Sub CountColoredCells()
    Dim rng As Range
    Dim cell As Range
    Dim targetColor As Long
    Dim count As Long

    Set rng = Range("A1:A10")
    targetColor = RGB(255, 0, 0)
    count = 0

    For Each cell In rng
        If cell.Interior.Color = targetColor Then
            count = count + 1
        End If
    Next cell

    MsgBox "指定された色(赤色)のセル数:" & count
End Sub
VBAで指定色のセル数をカウントした結果
VBAで指定色のセル数をカウントした結果

条件付き書式で赤く見えているセルを Interior.Color で取得すると、「見た目の赤」ではなく、セルに直接設定されている元の塗りつぶし色が返ることがあります。

Microsoft LearnのRange.DisplayFormat プロパティでは、DisplayFormat は条件付き書式の影響を受けた表示設定を返すと説明されています。条件付き書式で表示されている色を確認したい場合は、DisplayFormat.Interior.Color を使います。

Sub GetDisplayedColor()
    Dim displayColor As Long

    displayColor = Range("A1").DisplayFormat.Interior.Color
    MsgBox displayColor
End Sub

ただし、同じ公式ページでは、DisplayFormat はワークシート上のユーザー定義関数では使えない制限も説明されています。セルに =関数名() と入れて色を返す作りには向きません。VBAのSubプロシージャから確認する用途で考えると安全です。

動画で学ぶなら PR・アフィリエイト

セルの色変更だけでなく、Range・For Each・条件分岐まで理解したい方は、VBA講座も確認しておくと迷いにくいです

この記事のコードだけでも、塗りつぶしなし、色の変更、色の取得は試せます。ただ、RangeCellsFor EachIfSelect Case をまとめて身につけたい場合は、動画講座で実際の操作画面を見ながら学ぶと理解しやすくなります。

見るべきポイント セル操作・条件分岐・繰り返し処理まで扱っているか
失敗しにくい選び方 更新日・無料プレビュー・返金条件を確認
向いている人 コピペだけでなく、自分の表に合わせてコードを直したい人

※価格・割引・返金条件・講座内容は変わる場合があります。購入前にUdemy上で最新情報をご確認ください。

ColorIndexで色番号を指定する方法と一覧

ここからは ColorIndex だけを扱います。ColorIndex はExcelのカラー パレット上の番号で色を指定する方法です。既存コードに ColorIndex = 6 のような書き方がある場合や、塗りつぶしなしの -4142 を確認したい場合に使います。

ColorIndexで色番号から指定する

VBAで使うColorIndex一覧
VBAで使うColorIndex一覧

ColorIndexで黄色にするコード

Sub SetCellColorByColorIndex()
    Range("A1").Interior.ColorIndex = 6
End Sub

ColorIndex は、色を番号で指定します。短く書けますが、番号だけだと何色か分かりにくいため、新しく書くコードでは Interior.Color = RGB(...) の方が読みやすい場面も多いです。

ColorIndex一覧と塗りつぶしなしの番号

スクロールできます
色見本RGB指定VBA定数ColorIndexの目安
RGB(255, 0, 0)vbRed3
RGB(0, 255, 0)vbGreen4
RGB(0, 0, 255)vbBlue5
黄色RGB(255, 255, 0)vbYellow6
RGB(0, 0, 0)vbBlack1
灰色RGB(128, 128, 128)なし16
RGB(255, 255, 255)vbWhite2
水色RGB(0, 255, 255)vbCyan8
RGB(255, 0, 255)vbMagenta7
塗りつぶしなしなしxlNone / xlColorIndexNone-4142

Interior.ColorとColorIndexを混ぜない使い分け

初心者のうちは、次のように役割で分けてください。色を付ける・取得する説明を読むときは Interior.Color、色なしに戻す・古い番号指定を読むときは ColorIndex です。

スクロールできます
方法向いている場面注意点
Interior.Color = RGB(...)色を分かりやすく指定したいRGBの3つの数字を管理する
Interior.Color を取得セルの背景色をRGB値や色名で判定したい戻り値はLong型の数値
Interior.ColorIndex = 6ColorIndex番号で管理している既存コードを直す番号だけだと色が分かりにくい
Interior.ColorIndex = xlNone塗りつぶしなしに戻す色を付ける用途ではなくクリア用途で使う

FAQとまとめ

最後に、検索でよく出てくる疑問をまとめます。

Interior.Colorで塗りつぶしなしにできますか?

塗りつぶしなしに戻す目的なら、Interior.Color より Interior.ColorIndex = xlNone または xlColorIndexNone を使う方が分かりやすいです。Interior.Color はRGB値で色を付ける・取得する用途に向いています。

xlNonexlColorIndexNone はどちらを使えばいいですか?

初心者向けのサンプルでは xlNone で十分です。公式表記に寄せたい場合やチームで読みやすさを重視する場合は、xlColorIndexNone と書くと意味が明確です。

シート全体ではなく、ブック内の全シートをクリアしたい場合は?

Cells.Interior.ColorIndex = xlNone はアクティブシートだけです。全シートを対象にするなら、ワークシートをループします。コード例はFAQの下に置いています。

背景色だけで業務判定しても大丈夫ですか?

目印としては便利ですが、できれば「ステータス」「判定」などの列に値を持たせ、その値をもとに色を付ける方が安全です。色だけで管理すると、手作業の塗り忘れや条件付き書式との混同が起きやすくなります。

セルの値や罫線も消したい場合は?

この記事のコードは塗りつぶし色だけを消します。値を消したい場合は ClearContents、書式全体を消したい場合は ClearFormats など別のメソッドを使います。色だけを消したいなら ColorIndex = xlNone にしておくのが安全です。

ブック内の全シートをまとめてクリアするコード例

Sub RemoveAllSheetsCellColors()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        ws.Cells.Interior.ColorIndex = xlNone
    Next ws
End Sub

次に読む記事

Schedika ローカルガントチャート
PR・自社製品 無料Liteあり

セルの色分けで進捗管理をしていて、表が見づらくなっていませんか?

VBAでセルの色を変えられるようになると、進捗表やタスク表を色分けして管理しやすくなります。ただ、案件数や担当者が増えると、色だけでは「いつまでに何をするか」が追いにくくなります。締切や工程を横軸で見たい場合は、ローカルで動くガントチャートアプリ Schedika に分けると、色分け表とスケジュール管理を切り離して整理できます。

  • 外部送信なし
  • Excelへ提出しやすい
  • ブラウザで起動

※Schedikaは筆者が作成した自社製品です。無料Lite版とStandard版の違い、動作環境、価格はリンク先で確認できます。

まとめ

  • VBAでセルを塗りつぶしなしにするなら、まず Range("A1").Interior.ColorIndex = xlNone
  • 公式表記に寄せるなら xlColorIndexNone。どちらも色なしの説明と合わせて使う。
  • 色を付ける・取得するなら Interior.Color = RGB(...) が分かりやすい。
  • ColorIndex は色番号や塗りつぶしなしを扱うときに便利。
  • 条件付き書式の見た目の色は、Interior.Color ではなく DisplayFormat.Interior.Color を検討する。
  • 色だけで業務判定せず、できれば値やステータス列を持たせてから色を付けると実務で壊れにくい。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次