機械的に書けるコードは、マクロをマクロに書いてもらうテクニックが使えます。
今回の題材である「セルの文字色・背景色を設定する」マクロを作るときは、
「すでにどこかのセルで使われている色」にすることが多いです。
この時、
①使う色のRGB値を調べる
②その値で着色するコードを書く
という手順を踏むことになりますが、
この2つを、セットでマクロにやってもらいましょう。
選択セルのColorプロパティ設定コードを生成する
マクロの概要
使いたい色が着色されているセルを選択して、
マクロ「選択セルのColorプロパティ設定コードを生成する」を実行します。
すると、「そのセルの色で、そのセルを着色するソースコード」が、
イミディエイトウィンドウに出力されます。
実行・活用例
' 実行結果でイミディエイトウィンドウに生成されるテキスト Cells(6, 3).Interior.Color = RGB(255,255,255) Cells(6, 3).Font.Color = RGB(255,0,0) Cells(6, 3).DisplayFormat.Interior.Color = RGB(221,235,247)
- ↑のテキストが、イミディエイトウィンドウに出力されます。
- Cells(6, 3)部分を書き換えれば、そのままコードとして使えます。
- DisplayFormatは、条件付き書式などでの着色です。
- 実行結果は「Interior.Colorが白で、DisplayFormatが水色」なので、水色の縞模様は条件付き書式でつけられていることがわかります。
ソースコード
' セル着色コードの生成 Sub 選択セルのColorプロパティ設定コードを生成する() With ActiveCell Dim Cellsテキスト As String Cellsテキスト = "Cells(" & .Row & ", " & .Column & ")" ' セル書式を「プロパティ = RGB()」でイミディエイトウィンドウに表示 Debug.Print Cellsテキスト & ".Interior.Color = RGB(" & RGB値を各色の値に変換する(.Interior.Color) & ")" Debug.Print Cellsテキスト & ".Font.Color = RGB(" & RGB値を各色の値に変換する(.Font.Color) & ")" ' 条件付き書式で色が変わっていればそれも表示 If .DisplayFormat.Interior.Color <> .Interior.Color Then Debug.Print Cellsテキスト & ".DisplayFormat.Interior.Color = RGB(" & _ RGB値を各色の値に変換する(.DisplayFormat.Interior.Color) & ")" End If If .DisplayFormat.Font.Color <> .Font.Color Then Debug.Print Cellsテキスト & ".DisplayFormat.Font.Color = RGB(" & _ RGB値を各色の値に変換する(.DisplayFormat.Font.Color) & ")" End If End With End Sub ' RGB値 → R,G,Bテキスト Function RGB値を各色の値に変換する(RGB値 As Long) As String Dim R, G, B R = RGB値 Mod 256 G = Int(RGB値 / 256) Mod 256 B = Int(RGB値 / 256 / 256) RGB値を各色の値に変換する = R & "," & G & "," & B End Function
コードに組み込むものではなく、単独で実行するタイプのマクロなので、
個人用マクロブックなどに登録して、マクロ一覧(Alt+F8)から呼び出すと便利です。
職場がカラフルなエクセルであふれていて、よほどよく使う人は、
クイックアクセスツールバーに登録する手もあります。
コードの解説
Colorプロパティの値は、「16764390」のような255進数の変換値になっているので、これをRGB関数に使うために、R,G,Bそれぞれの値に戻してから出力します。
2つ目の関数がそれにあたりますが、詳しい解説は↓の記事をどうぞ
【ExcelVBA】Colorプロパティの値からRGBの値を求める - 和風スパゲティのレシピ
また、DisplayFormat(表示されている色)が、セル本来の書式と異なる場合は、それも表示しています。
主に「条件付き書式」でつけられた色を調べることが目的で、
実行サンプルでは、「Interior.Colorが白で、DisplayFormatが水色」なので、
表の水色縞模様は条件付き書式でつけられていることがわかります。
※ 条件書式の縞模様は、条件式「=ISEVEN(ROW():行数が偶数か」で簡単に付けられます。
他には、「テーブル」機能によってつけられた余計な縞模様や、セルの表示書式を「通貨」などにした際の「負の値を赤」にも反応するようです。
なお、DisplayFormatは読み取り専用プロパティのため、コピペしてもそのままではマクロは動きませんのでご注意ください。
DisplayFormatを消して、固定書式として設定するなどしてください。
条件付き書式の色を、条件を無視して直接着色できるわけないので、当たり前と言えば当たり前ですね。