さて
VBAにおいてRGB関数で色を指定する
の時に、とりあえず256x256x256通りの色の表示を見ました。
実際には256x256x256色も表示できないことを
見て実感しました。
では一体Excelでは何色表示できるのか
自力で調べてみます。
RGB関数は長整数型 (Long)です。
Msgboxで表示させてみるとわかります。
MsgBox RGB(0, 0, 0)
また、セルの塗りつぶしの色は、
MsgBox ActiveCell.Interior.Color
でわかります。
両方とも長整数型 (Long)なので
これを利用して
Excelでは何色表示できるのか調べます。
最初に
実際に表示される色(以下、表示色)
RGB関数の引数Red, Green, Blue
RGB関数の長整数型 (Long)
表示色のLong
の4つの関係を見てみます。
以下のコードをコピペし実行すると
次のようになります。
関係を見るだけなので
ここでは一部の組み合わせしか表示していません。
4つの関係を見るコード:Sub Macro100107b() 'RGB関数のRed, Green, Blueと 'そのLong型と '実際に表示される色の長整数型 (Long)の関係を見る Dim r, g, b As Integer Dim i As Long Cells.Delete Cells(1, 1) = "色の表示" Cells(1, 2) = "RGB" Cells(1, 3) = "RGBLong" Cells(1, 4) = "表示色Long" i = 2 Application.ScreenUpdating = False For r = 0 To 1 For g = 0 To 100 For b = 0 To 255 Cells(i, 1).Interior.Color = RGB(r, g, b) Cells(i, 2) = "(" & r & ", " & g & ", " & b & ")" Cells(i, 3) = RGB(r, g, b) Cells(i, 4) = Cells(i, 1).Interior.Color i = i + 1 Next b Next g Next r Application.ScreenUpdating = True End Sub |
結果:

上図のようにRed, Green, Blueの組み合わせと
それにともないRGB関数のLongの値も違うのに
同じ黒の表示色になっているものがあります。
表示色が同じなら、表示色のLongも同じです。
ここで、ある1つの表示色のLongと
RGB関数Longの値が同じものが1つだけあると予想できます。
そこで
表示色Long = RGB関数Long
のものだけを残して表示してみる。
以下のコードを実行すると
次のようになります。
表示色Long = RGB関数Longのコード:Sub Macro100107c() 'RGB関数Long=表示色Long の条件に '当てはまるもののみ残す '参考用に16進数表示も
Dim r, g, b As Integer Dim i As Long Dim StrHex As String Cells.Delete Cells(1, 1) = "色の表示" Cells(1, 2) = "RGB" Cells(1, 3) = "RGBLong" Cells(1, 4) = "表示色Long" Cells(1, 5) = "16進数表示" i = 2 Application.ScreenUpdating = False For r = 0 To 255 For g = 0 To 255 For b = 0 To 255 Cells(i, 1).Interior.Color = RGB(r, g, b) If Cells(i, 1).Interior.Color = RGB(r, g, b) Then Cells(i, 2) = "(" & r & ", " & g & ", " & b & ")" Cells(i, 3) = RGB(r, g, b) Cells(i, 4) = Cells(i, 1).Interior.Color If r < 16 Then StrHex = "#" & StrHex & "0" & Hex(r) Else StrHex = "#" & StrHex & Hex(r) End If If g < 16 Then StrHex = StrHex & "0" & Hex(g) Else StrHex = StrHex & Hex(g) End If If b < 16 Then StrHex = StrHex & "0" & Hex(b) Else StrHex = StrHex & Hex(b) End If Cells(i, 5) = StrHex StrHex = "" Application.ScreenUpdating = True Application.ScreenUpdating = False i = i + 1 End If Next b Next g Next r Application.ScreenUpdating = True End Sub |
結果:


一回一回セルを塗りつぶしてますので時間がかかります。
なんと46色しか残ってません。
色鉛筆の種類にしてみたら多いかも知れないですけど
ディスプレイで46色は少なすぎる。
何かが間違っているんでしょうね~
課題が残ります。
ここでの結果を見ると
51, 102, 128, 153, 204 , …
と似通った数値ですが
よく見るとそれらの数値のすべての組み合わせが
残っているわけではないようです。
試しに上の結果にはないRGB(0, 51, 51)の表示色、そのLongと
RGB関数Longの値を見てみます。
次のコードは
RGB(0, 51, 51)の表示色のLongと
RGB関数Longの値が同じものがあれば
そのセルを選択して示します。
表示色Long = RGB関数Longのコード:Sub Macro100107d() 'Macro100107cを実行したSheetの1行目に '1行挿入してから 'Macro100107cを実行したSheetで実行してください。
Dim r, g, b As Integer r = 0 g = 51 b = 51 Cells(2, 1).Interior.Color = RGB(r, g, b) Cells(2, 2) = "(" & r & ", " & g & ", " & b & ")" Cells(2, 3) = RGB(r, g, b) Cells(2, 4) = Cells(2, 1).Interior.Color Dim i, EndRow As Long EndRow = Range("D2").End(xlDown).Row For i = 3 To EndRow If Cells(2, 4) = Cells(i, 4) Then Cells(i, 4).Select MsgBox "同じ数値があります" End If Next i End Sub |
結果:

RGB(0, 51, 102)と同じ表示色のようです。
r, g, bの値をそれぞれ替えるといろいろ試せます。
以上、自力で何にも情報を探さないで調べた結果
Excelで表示できる色は46色???でした。
コメント