« R1C1形式をA1形式に変換する | トップページ | Excel2000をオフラインでアップデート »

2010年1月 4日 (月)

VBAにおいてRGB関数で色を指定する

RGB関数を使うとき

RGB(red, green, blue)のred, green, blueのそれぞれに
0から255までの整数を指定します。

理論的には256*256*256=16777216通り指定できますが
実際にはそれだけの種類で表示されません。

経験的にそのことはわかっていたのです。
が、いまいち頭がすっきりしないので、
すべての組み合わせの表示を
実際に見てみようと思ったわけです。

仕組みはいたって単純。

あるredの値で、行方向にgreenを、列方向にblueを
0から255まで変化させて
セルの内部の色を指定するだけ。
コード内ではred, green,blueはそれぞれr, g, b

red軸で変化するカラーパレット

Sub Macro100104a()
'カラーパレット
'r軸で変化
    Dim ColorTable As String
    Dim MyR, MyC As Integer
    Dim r, g, b As Integer
   
    Range(toA1("R2C1:R257")).Delete
    Range(toA1("R2C1:R257")).ColumnWidth = 3 / 4
    Range(toA1("R2C1:R257")).RowHeight = 21.75 / 3
    For r = 0 To 255 Step 8
        Cells(1, 1) = "R=" & r
        Application.ScreenUpdating = False
        For g = 0 To 255
            For b = 0 To 255
                Cells(g + 2, b + 1).Interior.Color = RGB(r, g, b)
            Next b
        Next g
        Application.ScreenUpdating = True
    Next r
End Sub

上記のコードを実行するとこのように

Pic20100104a

この画像は静止画ですが実際にはアニメのように動きます。
全体を見るにはExcelの表示倍率を25%程度にしてください。

意外にも、私ごのみの
パウル・クレーやカンディンスキー風の
抽象絵画的な動画になりました
左上から右下にかけて無彩色が動いていくのが
わかります。
色の勢力図といったところでしょうか。

いや、色の群雄割拠?

色の戦国時代?

色の「信長の野望」!?

ある時点で色がパッと塗り変わるところなんか
「信長の野望」で侵略成功したときを思い出します。

せっかくなので、
green軸、blue軸で変化するコードも作りました。

green軸で変化するカラーパレット

Sub Macro100104b()
'カラーパレット
'g軸で変化
    Dim ColorTable As String
    Dim MyR, MyC As Integer
    Dim r, g, b As Integer
    Range(toA1("R2C1:R257")).Delete
    Range(toA1("R2C1:R257")).ColumnWidth = 3 / 4
    Range(toA1("R2C1:R257")).RowHeight = 21.75 / 3
    For g = 0 To 255 Step 8
        Cells(1, 1) = "R=" & r
        Application.ScreenUpdating = False
        For r = 0 To 255
            For b = 0 To 255
                Cells(r + 2, b + 1).Interior.Color = RGB(r, g, b)
            Next b
        Next r
        Application.ScreenUpdating = True
    Next g
End Sub

green軸表示例:

Pic20100104b

blue軸で変化するカラーパレット

Sub Macro100104c()
'カラーパレット
'b軸で変化
    Dim ColorTable As String
    Dim MyR, MyC As Integer
    Dim r, g, b As Integer
   
    Range(toA1("R2C1:R257")).Delete
    Range(toA1("R2C1:R257")).ColumnWidth = 3 / 4
    Range(toA1("R2C1:R257")).RowHeight = 21.75 / 3
    For b = 0 To 255 Step 8
        Cells(1, 1) = "R=" & r
        Application.ScreenUpdating = False
        For r = 0 To 255
            For g = 0 To 255
                Cells(r + 2, g + 1).Interior.Color = RGB(r, g, b)
            Next g
        Next r
        Application.ScreenUpdating = True
    Next b
End Sub

blue軸表示例:

Pic20100104c

いや~楽しいですね。
この抽象感!!
RGB関数でまだまだ遊べそうです。

|

« R1C1形式をA1形式に変換する | トップページ | Excel2000をオフラインでアップデート »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: VBAにおいてRGB関数で色を指定する:

« R1C1形式をA1形式に変換する | トップページ | Excel2000をオフラインでアップデート »