目次
目的の色
今回の投稿では、 Excel (エクセル)の色の一覧(カラーパレット)をワークシート上に表示するマクロを作成してみました。
セルの背景色、文字の色、罫線の色の指定で、 ColorIndex カラーインデックスの番号を指定することがあると思いますが、その時に、目的の色と指定する色の番号が直ぐに一致しないことが多いので、テストとして一覧を表示してみることにしました。
マクロの一例
早速、以下のようなマクロを作成してみました。少し長いマクロになっていますが、マクロの作成者さんによって作成方法が違ってくると思いますので、マクロの一例としてご覧ください。
Option Explicit '---(1) Sub VBAのカラーパレットの一覧を表示するマクロ() '---(2) Dim i As Long '---(3) Range("A1:B1").Value = Array("カラーパレットのインデックス番号", "色") '---(4) Range("A2").Value = "xlColorIndexAutomatic(-4105 自動設定)" '---(5) Range("B2").Interior.ColorIndex = xlColorIndexAutomatic '---(6) Range("A3").Value = "xlColorIndexNone(-4142 色なし)" '---(7) Range("B3").Interior.ColorIndex = xlColorIndexNone '---(8) Columns("A:B").AutoFit '---(9) For i = 1 To 56 '---(10) Cells(i + 3, 1).Value = i '---(11) Cells(i + 3, 2).Interior.ColorIndex = i '---(12) Next i '---(13) End Sub '---(14)
上のマクロを、空白のワークシート上で実行してみたいと思います。下記の画像のように何も入力されていない状態で実行してみます。
マクロを実行してみると、以下の画像のような結果になりました。 1 から 56 番までの色の一覧が表示されました。
全体のスクリーンショットが撮影できなかったので、分割して撮影した画像を掲載しています。
マクロの分解
上のマクロを一行一行分解して見てみたいと思います。簡単な説明になりますが、参考にご覧ください。
Option Explicit '---(1)
変数の宣言を強制する記述です。私の場合、マクロが少し長くなって来た時は、どんな変数を使用しているか覚えられないので、記述するようにしています。
Sub VBAのカラーパレットの一覧を表示するマクロ() '---(2)
マクロの名前です。 Excel のワークシートからマクロを呼び出す( Alt キー + F8 キー)時の名前になります。
Dim i As Long '---(3)
変数「i」を長整数型で宣言しています。 For Next ループでカウントアップする番号を入れる予定です。
Range("A1:B1").Value = Array("カラーパレットのインデックス番号", "色") '---(4)
「A1」セルと「B1」セルに見出しの文字を入力しています。「Value」の値を変更すると、ワークシートに入力されているセルの値も変更されます。
Array("文字1","文字2") と記述することで値の一括代入が可能です。 A1 セル , B1 セル と "文字1" , "文字2" が対のようになっています。
Range("A2").Value = "xlColorIndexAutomatic(-4105 自動設定)" '---(5)
「A2」セルに文字を入力しています。「"」ダブルクオーテーションで囲んだ文字が入力されます。
Range("B2").Interior.ColorIndex = xlColorIndexAutomatic '---(6)
「Interior.ColorIndex」の部分が背景色の指定項目になっています。「B2」セルの背景色を「自動」に設定しています。
「xlColorIndexAutomatic」は定数というもので、数値では「-4105」になるようです。
Range("A3").Value = "xlColorIndexNone(-4142 色なし)" '---(7)
「A3」セルに文字を入力しています。
Range("B3").Interior.ColorIndex = xlColorIndexNone '---(8)
「B3」セルの背景色の塗りつぶしを行わない指定をしています。
「xlColorIndexNone」は数値で「-4142」となるようです。
Columns("A:B").AutoFit '---(9)
「A」列と「B」列の列幅を自動調整しています。ワークシート上のマウス操作で A 列と B 列の境の部分をダブルクリックした時と同じ動作になると思います。
For i = 1 To 56 '---(10)
For...Next のループを使用しています。カラーインデックスの番号を 1 ~ 56 までループしたいので、 1 to 56 となっています。変数「i」がループする度にカウントアップされていきます。
Cells(i + 3, 1).Value = i '---(11)
「Cells」プロパティというものを使用しています。現在のワークシートの「i+3」行目の「1」列目のセルに変数「i」の数値を入力しています。「i+3」行目としているのは、見出しと連番以外の行数分だけ下に送っているためです。連番の入力開始は「4」行目からになります。
例)
変数「i」が「1」の場合、「1+3」行目の「1」列目のセルに「1」を入力します。以下の表のように数値が変化します。
変数 i | 行(i+3) | 列 | セル値 |
---|---|---|---|
1 | 4 | 1 | 1 |
2 | 5 | 1 | 2 |
3 | 6 | 1 | 3 |
Cells(i + 3, 2).Interior.ColorIndex = i '---(12)
上の '---(11) の右側のセル( 2 列目、 B 列)の背景色を設定しています。
Next i '---(13)
For...Next のループの終了部分です。「Next」の後の「i」は省略しても良いものか、よくわかっていませんが、「Next」と「Next i」と同じ動作になるような気がします。
End Sub '---(14)
「Sub」ステートメントの終了部分になります。ここまでで一つのマクロの完成です。
参考資料
- ColorIndex プロパティ (Excel グラフ) | Microsoft Docs
- https://docs.microsoft.com/ja-jp/office/vba/api/excel.colorindex
- ColorIndex プロパティ (Excel) | Microsoft Docs
- https://docs.microsoft.com/ja-jp/office/vba/api/excel.tab.colorindex
テスト環境
- Windows 10
- Microsoft Office Excel 2003
あとがき
今回作成したマクロの中で、「xlColorIndexAutomatic」「xlColorIndexNone」という定数が出てきましたが、その定数の元の値を調べる場合は、調べたい定数の文言に文字入力カーソルを合わせて「Ctrl + i」のショートカットを実行してみるとクイックヒントとして、値が表示されると思います。私の使用しているバージョンは「Excel 2003」なので、違うところもあるかもしませんが良ければお試し下さい。
VBE の「編集 > クイックヒント」からも同じ事が行えると思います。
以上、閲覧ありがとうございました。