For~Next の入れ子を3重構造で使う

RGB関数で色番号一覧表をつくるマクロ

Excelのマクロでセルの背景色やフォントの色を指定するときは、ColorIndexプロパティを使う方法と、Colorプロパティ(Excel2007以降)を使う方法の2通りあります。
37回では、For~Next を入れ子にすることで、ColorIndexをセル範囲に表示しました。 今回は、もっと多彩な色を使いたい時のためにRGB関数を使って、色の一覧表を作成します。
(サンプルファイルは、こちらから 2013マクロ講座38回サンプルデータ

RGBの色の一覧表をマクロで作る

RGB関数で色を指定できるとわかっていても、さて自分のイメージの色がどの番号で指定できるのかを確認する時に便利な一覧です。
あ
Colorプロパティはオブジェクトに応じて適用する色を設定します。色は、RGB関数によって作成された値です。
RGB 関数
書式 RGB(red, green, blue)
red:RGBのR(赤)の割合を0~255の整数で指定します
green:RGBのG(緑)の割合を0~255の整数で指定します
blue:RGBのB(青)の割合を0~255の整数で指定します

なるべく、均等に増加させたいので、255ではなく256で計算することにします。
0~256までを32ずつ増やします。
For~Nextを入れ子で3重構造にしています。
Sub rgbirobango()
    Dim 行 As Integer, 列 As Integer, R As Integer, g As Integer, B As Integer
    行 = 0
    For R = 0 To 256 Step 32 ' 赤の割合を32づつ増やします。
        For g = 0 To 256 Step 32 ' 緑の割合を32づつ増やします。
            行 = 行 + 1 		' 行の値に+1します。
            For B = 0 To 256 Step 32 ' 青の割合を32づつ増やします。
                列 = B / 32 + 1
                If R = 256 Then R = 255
                If g = 256 Then g = 255
                If B = 256 Then B = 255
                Cells(行, 列) = R & ", " & g & ", " & B
                Cells(行, 列).Interior.Color = RGB(R, g, B)
                If (R + g + B) / 32 < 7 Then Cells(行, 列).Font.ColorIndex = 15
            Next
        Next
    Next
End Sub

For~Nextステートメントの使い方

For~Nextステートメントの考え方
最初に、Forで繰り返し回数を宣言します。
繰り返し回数は、カウンタの変化範囲(開始値と終了値)で指定します。

For~Nextを入れ子で3重構造で使っても、2重構造の時と考え方は同じです。
スポンサーリンク
スポンサーリンク

RGBの色の一覧表をつくるマクロ

こちらは、もう少し色数を増やすために、16ステップずつ増やしてみました。
あ
コードは最初のマクロと殆ど変わりません。
Sub rgbirobango2()
    Dim 行 As Integer, 列 As Integer, R As Integer, g As Integer, B As Integer
    行 = 0
    For R = 0 To 256 Step 16
        For g = 0 To 256 Step 16
            行 = 行 + 1
            For B = 0 To 256 Step 16
                列 = B / 16 + 1
                If R = 256 Then R = 255
                If g = 256 Then g = 255
                If B = 256 Then B = 255
                Cells(行, 列) = R & ", " & g & ", " & B
                Cells(行, 列).Interior.Color = RGB(R, g, B)
                If (R + g + B) / 16 < 10 Then Cells(行, 列).Font.ColorIndex = 15
            Next
        Next
    Next
End Sub
もっとたくさんの色を一覧表にしたい時は、Step 16をStep 8などにしてみると良いでしょう。

今日の講義は以上です。お疲れ様でした。
スポンサーリンク
スポンサーリンク