top of page
ティーマネジメント株式会社 Tmanagement
TM_ロゴ_決定分_ol2.png

Excel 文字色や背景色を取得する②

  • 執筆者の写真: ゆった
    ゆった
  • 7月24日
  • 読了時間: 4分
ree

はじめに

こんにちは、ティーマネジメントのゆったです。


日差しの厳しい季節になりましたが、毎年夏前には赤紫蘇シロップを作って紫蘇ジュースを楽しんでいます♪

赤紫蘇を煮出してお砂糖を溶かし最後にレモン汁を入れるのですが、お鍋に入った黒っぽい紫が驚くほど鮮やかな赤紫に変わるのを見ると「夏が来たなあ」という気分になります🌻🌻🌻


***


今回は前回に引き続き、VBAで色を使った条件を使用する方法をご紹介します。

前回の記事でマクロを使った色の取得方法についてをお伝えしましたので、

今回は、取得した色の定数を使用して条件を分岐させる方法についてご説明したいと思います!




色で条件分岐させる

カラーインデックスとは

復習になりますが、色は「範囲.Font.ColorIndex」または「範囲.Font.Color」で取得することができます。

まずは「範囲.Font.ColorIndex」を使って色名を入力させるマクロを作成してみましょう。

ree

※Excelのカラーインデックスに登録されている色は、

 ファイル > オプション > 保存 > (ブックの外観の保持) 色 を開くと確認できます。

ree

標準の色と対応するカラーインデックス番号は下図の通りです。

ree


カラーインデックスを使用した色の分岐

まずはよく使用される1~10番のカラーインデックスで分岐を作ってみましょう。

下記がA1セルに入力されている背景色の色名をB1セルに書き出すVBAです。

Sub 背景色の色名を判定()
	Dim 背景色 As Long
	Dim 出力先 As Range

	'結果の出力先のセルを設定する
	set 出力先 = Range("B1")

	'A1セルの背景のカラーインデックスを取得する
	背景色 = Range("A1").Interior.ColorIndex

	'B1セルに取得したカラーインデックスを入力する
	Range("B1") = 背景色

	'C1セルに色名を入力
	Select Case 背景色
		Case 1
			出力先 = "黒"
		Case 2
			出力先 = "白"
		Case 3
			出力先 = "赤"
		Case 4
			出力先 = "黄緑"
		Case 5
			出力先 = "青"
		Case 6
			出力先 = "黄"
		Case 7
			出力先 = "ピンク"
		Case 8
			出力先 = "水"
		Case 9
			出力先 = "茶"
		Case 10
			出力先 = "緑"
		Case Else
			出力先 = "不明"
	End Select
End Sub

A1セルを塗り替えてマクロを実行した結果が下図になります。

色数は限定されますが、しっかり色名が入力されることがわかります。

ree


応用編 色の系統を判別させる

カラーインデックスを使うと簡易に色の判別は可能ですが、設定していない色があると正しい結果を返すことができません。

多くの色を使用したい場合などの汎用性を高める一案として、RGBを取得して赤緑青のどの色が強いかで判別をさせる方法があります。


つまり、

R (レッド) が最も大きい数値であれば "赤系統"

G (グリーン) が最も大きい数値であれば "緑系統"

B (ブルー) が最も大きい数値であれば "青系統"

そして、この三色の値が同じであれば "灰系統" と結果が返るようにしたいと思います。


ではさっそく、A列にいろいろな背景色を並べて判定できるVBAを作ってみましょう。

※RGBの取得方法については前回の記事を参照してください

Sub 背景色の色系統を調べる2()
	Dim 行 As Long
	Dim 背景色 As Long
	Dim R As Integer
	Dim G As Integer
	Dim B As Integer
	Dim 結果 As String

	'行に初期値の1を設定
	行 = 1

	'A列の背景色が無色になるまで繰り返す
	Do While Cells(行, "A").Interior.ColorIndex <> xlNone

		'A列の背景色を取得し、RGBの数値を計算する
		背景色 = Cells(行, "A").Interior.Color
		R = 背景色 Mod 256
		G = Int(背景色 / 256) Mod 256
		B = Int(背景色 / 256 / 256)

		'RGBの割合で色の系統を判定する
		If R = G And G = B And B = R Then 'RGBの値が同一の場合
			結果 = "灰系統"
		ElseIf R > G And R > B Then 'Rの値が最も大きい場合
			結果 = "赤系統"
		ElseIf G > R And G > B Then 'Gの値が最も大きい場合
			結果 = "緑系統"
		ElseIf B > R And B > G Then 'Bの値が最も大きい場合
			結果 = "青系統"
		End If

		'B列に結果を入力する
		Cells(行, "B") = 結果
		行 = 行 + 1
	Loop
End Sub

上記を実行すると下図の結果が出力されます。

カラーインデックスの分岐よりずっと複雑にはなりますが、特定の色に対する分岐ではなくどんな色が設定されるかわからない場合にはこういった幅を持たせる工夫も必要です。

ree



さいごに

色を取得したり、条件に使用したりすることは難しいことではないのですが、

「何色か」を判定させるにはかなり複雑な条件分岐が必要になります。

また、前回の記事でも触れましたが、多くの色を使用するとユーザーを混乱させるリスクもあります。

そのため、VBAによる自動化を行う前にExcelで使用している色の整理を行うことも大切です。


ティーマネジメントではExcelやVBAに慣れていない方でもスムーズに自動化できるお手伝いをしておりますので、

お困りごとやご相談がありましたら、お気軽にぜひお問い合わせください❁❁❁

CONTACT

お問い合わせ

滋賀県大津市別保三丁目11番32号

077-536-6330

平日10:00~18:00

労働者派遣事業 派 25-300477

有料職業紹介事業  25-ユ-300214 

問い合わせのご用件 必須項目

送信ありがとうございました

Copyright © ティーマネジメント株式会社 All Rights Reserved.

bottom of page