プチIT化

【Excelマクロ】セルに色がついていたら処理を行うマクロサンプル

こんにちは、今日はExcelでセル色の塗りつぶしがあるかないかで処理を変更するマクロサンプルVBAを作成してみましたので、共有します!

マクロの中で、セルが色付いていた場合の処理とそうでない処理を分けたい時ってないですか?例えば以下のようなシーン。

  • 塗りつぶされたセルがあれば処理をする、塗りつぶされていなければ何もしない
  • セルの色が赤だったら、セルの色が青だったら、の分岐処理

実際に私もこういうマクロが欲しい場面があったので、マクロを作成しました。この記事ではサンプルマクロを共有しています。それではいってみましょう!

マクロの実行については自己責任でお願いいたします。

塗りつぶしあり/なしで分岐処理

概要

セルが塗りつぶされているか・いないかで処理を分けるサンプルマクロです。セルが何色で塗りつぶされているかは関係なくセルの背景が青色でも赤色でも、塗りつぶしがあるかどうかで判定します。

マクロサンプル

サンプルマクロは以下です。A1のセル(※ここは判定したいセルを指定してくださいね!)が塗りつぶされている場合は「塗りつぶしあり」のメッセージを、塗りつぶされていない場合は「塗りつぶしなし」のメッセージボックスを出しています。

Sub fillJudge()

' 色判定を行うサンプル
If ActiveSheet.Range("A1").Interior.ColorIndex = xlNone Then
  ' 塗りつぶしなしの場合の処理
  MsgBox ("塗りつぶしなし")
Else
  ' 塗りつぶしありの場合の処理
  MsgBox ("塗りつぶしあり")
End If

End Sub

マクロサンプル解説

サンプルマクロについて追加での解説です。判定にはInteriorオブジェクトのColorIndexを使っています。これは、背景色をVBAの決められた番号で色を指定する方法です。例えば、1なら黒,2なら白,3なら赤という風に番号に色が対応しており、これが56設定されています。この指定を番号ではなく、xlNoneにすると"塗りつぶしなし"となります。

このxlNoneを使って、塗りつぶしなし場合とそれ以外の場合の処理をIF文を記載しているというわけです!

特定の色で処理を分ける場合

概要

塗りつぶしの背景色で処理を分岐させるサンプルマクロです。例えば、青色だったらAという処理する、赤色だったらBという処理、緑色だったらCという処理するといった具合です。カラーインデックスや色定数には特定の色しか指定できないので、RGB値で判定するサンプルとなっています。

マクロサンプル

事前準備:色の値を調べる

事前に背景色のRGB値を確認しておきます。手順は以下です。

  1. 処理を分けたい色で塗りつぶしされたセルを選択
  2. 右クリック>[セルの書式設定]
  3. [塗りつぶしタブ]>[その他の色]ボタンクリック
  4. [ユーザ設定]タブ>RBG値をメモ

RGB値とはR(赤)・G(緑)・B(青)の値になります。RGBの順でメモしておけば、大丈夫です!マクロでもこの並びで指定していきます。この記事では上記画像の赤っぽい色で、R:255・G:124・B:128の値で現わされている色でサンプルマクロを書いていきます。

マクロ

サンプルマクロは以下です。A1のセルの背景色の色が指定したRGB値の色かどうかで処理を判定しています。今回は先に書いた赤っぽい色かどうかで、赤っぽい背景色(R:255・G:124・B:128)の場合は「赤色」と、それ以外の色の場合は「それ以外の色」というメッセージを出しています。

Sub fillJudge()

If ActiveSheet.Range("A1").Interior.Color = RGB(253, 233, 217) Then
  ' 赤色の処理
  MsgBox ("赤色")
Else
  ' それ以外の色の処理
  MsgBox ("それ以外の色")
End If

End Sub

マクロサンプル解説

このサンプルマクロについての補足解説です。色指定の方法は56色のうちから指定するIndexカラーやvbBlackやvbWhiteなどの用意された定数で指定する方法もあるが今回はRBGで指定しています。

もし、一色だけでなく数種類の色で判定するのならば、IF・Elseだけでなく、IF・ElseIf・Elseで分岐させていけばいいかなと思います!

さいごに

いかがだったでしょうか。サンプルマクロが少しでも参考になったのなら幸いです。

マクロについて詳しくなってみませんか?
Excelマクロが使えるようになれば、日々の業務も捗ります。

マクロって痒いところに手が届く処理ができて便利だなと改めて思った日でした!それでは、また!

flier(フライヤー)