Excel VBAでセルの背景色をクリア(塗りつぶしなし)にする方法!

Excel VBAでセルの背景色をクリア(塗りつぶしなし)にする方法!
Excel VBAでセルの背景色(塗りつぶし)をクリアしたいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAで背景色だけを消す正しいコードがわからない
・色を消したつもりが、罫線や文字の書式まで消えてしまった
・手作業で1つずつ色を消すのが手間で、毎回時間がかかる

ですよね。

今回はそんなお悩みを解決する

・Excel VBAでセルの背景色をクリア(塗りつぶしなし)にする方法

についてまとめます!

完成イメージ

色付きの表は、手作業でもVBAでも「塗りつぶしなし」にできます。
今回は
・値や罫線はそのままに、背景色だけを消す方法(手作業・VBA)
をゴールにします。
いろいろな色で塗られた表
↓
完成イメージ
上の画像が完成形です。色付きだった表から背景色だけが消えて、値と罫線はそのまま残っています。

Interior.ColorIndex = xlNone を使えば、値も罫線も残したまま色だけをリセットできます。

なお、特定の色だけを消す方法や、Delete・ClearFormatsとの違い、色が消えないときの対処法(トラブルシュート)もあわせてご紹介します。

STEP1. 色付きの表を用意する

まずは背景色をクリアする対象として、色付きの商品一覧を用意します。
A列が商品、B列が数量、C列が単価、D列が金額です。
見出し行は濃い色、交互の行には薄い色、合計行にも色を付けてあります。
金額は =B2*C2 の数式にしておきましょう。
この「色付きの状態」をスタート地点にして、これから色だけを消していきます。
色付きの商品一覧

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。

商品 数量 単価 金額
ノートPC 3 128000
モニター 5 32000
キーボード 12 4800
マウス 20 2200
プリンタ 4 29800
タブレット 6 45000
ヘッドセット 15 6800
Webカメラ 8 7200
合計

※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。

STEP2. 手作業で背景色を解除する

まずはVBAを使わず、手作業で色を消す手順をおさえておきましょう。
色を消したい範囲をマウスで選択します。
次にホーム タブ → 塗りつぶしの色 → 塗りつぶしなしをクリックします。
ここではデータ部分(A2:D9)だけを選んで実行しました。
データ行の色だけが消えて、見出し行と合計行の色はそのまま残っています。
選択した範囲だけをピンポイントで消せるのが手作業の特徴ですね。
データ部分だけ手作業で色を解除した表

STEP3. Ctrl+Aでシート全体の色を解除する

シート全体の色をまとめて消したいときは、範囲選択を広げます。
表の中のセルを選択した状態で Ctrl+A を押すと、シート全体が選択されます。
そのまま塗りつぶしなしをクリックすれば、すべての背景色が一度に消えます。
値や数式、罫線はそのまま残るので、失敗を気にせず実行できます。
画像のとおり、表の外側にはグレーの枠線(グリッド線)が見えています。
これが「塗りつぶしなし」の状態です。
シート全体の色を解除した状態

STEP4. 「値は残して色だけ消す」を理解する

ここで大切なのが、「色を消す」と「中身を消す」は別ものという点です。
Deleteキーで消えるのは、セルの中の値や数式だけです。
背景色や罫線などの書式はそのまま残ります。
反対に、塗りつぶしなしで消えるのは背景色だけで、値や数式は残ります。
つまり「色だけ消したい」ときにDeleteキーを押すと、値まで消えてしまうわけです。
この違いを押さえておくと、「色を消したつもりが値まで消えた」という事故を防げます。

STEP5. VBAで背景色をクリアする(基本)

ここからはVBAで一括クリアする方法です。
まずは Alt+F11 でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。
背景色だけを「塗りつぶしなし」にする基本のコードはこちらです。

Sub ClearBgColor()
    ' A1:D10 の背景色をクリア(塗りつぶしなし)
    Range("A1:D10").Interior.ColorIndex = xlNone
End Sub

キモは Interior.ColorIndex = xlNone の1行だけです。
xlNone は「塗りつぶしなし」を表す定数で、これで色だけをリセットできます。
実行前の、いろいろな色で塗られた状態がこちらです。
このバラバラの色を、1行のコードでまとめて消していきます。
いろいろな色で塗られた表

STEP6. VBAを実行して色だけを消す

コードを貼り付けたら、F5キーで実行するか、ボタンに登録してクリックします。
色がすべて消えて、値と罫線だけが残りました。
金額は数式のままなので、計算された結果をそのまま保っています。
マウスで1つずつ消していく手間がなく、一瞬で終わるのがうれしいポイントです。
カンタンですね。
なお、Range(“A1:D10”).Interior.Pattern = xlNone でも同じ結果になります。
VBAで色をクリアした表

STEP7. 特定の色だけを消す

「すべての色ではなく、目印に付けた薄い赤だけを消したい」という場面もあります。
そのときは、色を判定してからクリアします。
数量が10以上の行に、薄い赤を付けた状態がこちらです。
この赤い行だけを消していきましょう。
目印の薄い赤を付けた表
セルを1つずつ見て、色が合っているものだけを消すコードはこちらです。

Sub ClearRedOnly()
    Dim r As Range
    For Each r In Range("A1:D10")
        If r.Interior.Color = RGB(255, 199, 206) Then
            r.Interior.ColorIndex = xlNone
        End If
    Next r
End Sub

RGB(255, 199, 206) が、消したい色(薄い赤)の指定です。
Interior.Color で実際の色と比べ、一致したセルだけを塗りつぶしなしにします。
実行すると、薄い赤だけが消えて、ほかの色はそのまま残りました。
このように、条件を変えれば「特定の行の色だけ」を消すこともできます。
特定の色だけを消した表

背景色クリアの方法の比較

ここまでの内容を、用途ごとに使い分けられるよう表にまとめました。

方法 消えるもの 残るもの 向いている場面
塗りつぶしなし(手作業) 背景色だけ 値・数式・罫線 数か所を目で確認しながら消したいとき
Deleteキー(値のみ) 値・数式だけ 背景色・罫線 セルの中身だけを消したいとき
ClearFormats 書式すべて(背景色・罫線・太字・表示形式) 値・数式 書式を白紙に戻したいとき
VBA(ColorIndex = xlNone) 背景色だけ 値・数式・罫線 毎回のリセット作業を自動化したいとき
POINT

背景色だけを消したいなら Interior.ColorIndex = xlNone が正解です。
白(RGB(255,255,255))で塗ると、色が消えたように見えても枠線まで隠れてしまうので避けましょう。
ClearFormats は罫線や太字まで消えるため、用途が違います。
毎回の作業なら、マクロの最初に Cells.Interior.ColorIndex = xlNone を入れると、シート全体をまとめてリセットできます。

タカヒロ

タカヒロ
毎回「どこに色が付いていたかな」と確認しながら手で消すのは大変です。
マクロの処理の最初に Cells.Interior.ColorIndex = xlNone を1行入れておくと、シート全体の色を毎回きれいにリセットできますよ。

罫線は残す?消す?(ColorIndexとClearFormatsの違い)

背景色だけを消したいのか、書式を全部消したいのかで、使うコードが変わります。
Interior.ColorIndex = xlNone は、文字どおり背景色だけを消します。
罫線や太字、表示形式はそのまま残ります。
一方、Range(“A1:D10”).ClearFormats は書式をまとめて消します。
背景色に加えて、罫線・太字・表示形式までリセットされます。
ClearFormatsを実行すると、こちらの画像のように罫線まで消えて、値だけが残ります。
「罫線を残したい」ならColorIndex、「いったん白紙に戻したい」ならClearFormatsと覚えておきましょう。
ClearFormatsで罫線まで消えた表

うまくいかないときの対処法(トラブルシュート)

実際に試すと、思ったように動かないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。

症状 原因 対処
マクロを実行しても色が消えない(1) シートが保護されている 校閲 タブ → シート保護の解除を実行してから、もう一度マクロを実行する
マクロを実行しても色が消えない(2) 表が「テーブル」になっている テーブルは書式が優先されます。テーブルを解除するか、テーブルデザインのスタイルを「なし」にする
マクロを実行しても色が消えない(3) 色が「条件付き書式」で付いている マクロでクリアしても条件付き書式の色は消えません。ホーム → 条件付き書式 → ルールの管理からルールを削除する
値まで消えてしまった Clear や Delete を使ってしまった すぐに Ctrl+Z で元に戻す。値だけならDelete、書式だけなら ColorIndex = xlNone と役割を分ける
一部のセルだけ色が残る 結合セルがある/指定範囲がずれている 結合を解除してから実行する。対象範囲(A1:D10 など)を見直す
印刷に色が残る 条件付き書式やテーブルのスタイルが原因 ページレイアウト → 印刷プレビューで確認し、条件付き書式のルールを見直す

機能・プロパティの説明

今回使うプロパティとメソッドの概要です。
どれも背景色の操作でよく出てくるので、違いを押さえておきましょう。

Interior.ColorIndex(インテリア・カラーインデックス)

書式 Range(“A1:D10”).Interior.ColorIndex = xlNone
できること セルの背景色(塗りつぶし)を色番号で指定します。xlNone を代入すると塗りつぶしなしになります。
値 色番号(0〜56)または xlNone(塗りつぶしなし)
こんなときに 背景色だけを消したいとき。値・罫線・その他の書式は残ります。
注意 RGBで色を指定したいときは Interior.Color を使います。ColorIndexは決まった56色の番号です。
Range("A1:D10").Interior.ColorIndex = xlNone

Interior.Pattern(インテリア・パターン)

書式 Range(“A1:D10”).Interior.Pattern = xlNone
できること 背景のパターン(模様)を指定します。xlNone で塗りつぶし自体をなしにします。
値 xlNone(なし)/xlSolid(ベタ塗り)/xlPattern など
こんなときに 色番号ではなくパターンの種類から塗りつぶしを解除したいとき。結果は ColorIndex = xlNone と同じです。
注意 ColorIndexと併用するときは、あとから設定したほうが有効になります。
Range("A1:D10").Interior.Pattern = xlNone

Interior.Color(インテリア・カラー)

書式 r.Interior.Color = RGB(255, 199, 206)
できること 背景色をRGB(光の三原色)で指定します。特定の色を判定するときにも使います。
値 RGB値(長整数)。塗りつぶしなしのセルは白(16777215)を返します。
こんなときに If r.Interior.Color = RGB(…) Then のように、特定の色だけを消したいとき。
注意 白く塗ったセルと塗りつぶしなしのセルは、RGBの値が同じになる場合があります。塗りつぶしの有無で判定したいときはColorIndexを使うと確実です。
If r.Interior.Color = RGB(255, 199, 206) Then

xlNone 定数(エックスエル・ナン)

書式 Interior.ColorIndex = xlNone
できること 「塗りつぶしなし」を表す組み込み定数です。Excelが用意しているので数値を覚える必要はありません。
値 -4142(xlNone)
こんなときに 背景色を消したいとき。RGB(255,255,255) の白塗りと違い、グリッド線が消えません。
注意 白(RGB(255,255,255))を代入すると「白く塗りつぶす」だけになり、枠線が消えて不自然な見た目になります。

ClearFormats メソッド(クリアフォーマッツ)

書式 Range(“A1:D10”).ClearFormats
できること セルの書式をすべて消去します。背景色・罫線・フォント・表示形式・配置が対象です。
値 戻り値なし(実行するだけ)
こんなときに 色だけでなく、書式をまとめて初期状態に戻したいとき。値や数式は残ります。
注意 罫線や太字も一緒に消えます。値も消したいときは Clear(ClearContents+ClearFormats)を使います。
Range("A1:D10").ClearFormats

完成

色付きだった表から、背景色だけがきれいに消えました。
値と数式、罫線はそのまま残っています。
思ったとおりに動きましたか?
マクロをボタンに登録しておけば、クリック1つで毎回のリセットが完了します。
完成した表
毎回の色消し作業から解放されて、表の見た目もいつもどおりに保てます。

さいごに

いかがでしょうか。

今回は、

・Excel VBAでセルの背景色をクリア(塗りつぶしなし)にする方法(Interior.ColorIndex = xlNone)

についてまとめました。

背景色だけを消したいときは Interior.ColorIndex = xlNone、書式ごと消したいときは ClearFormats と使い分けてください。
シート全体をリセットしたいときは Cells.Interior.ColorIndex = xlNone が便利です。
まずは今回のサンプル表で、ぜひ一度試してみてください。
また、他にも便利なExcel VBAの時短テクニックがありますので、よろしければご参照頂ければと思います。

ぜひ試してみてください。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image