こんにちは、hokkyokunです。
VBAで背景色や文字色を指定する際に
便利なツールを作ってみました。
関数はオリジナルですが、
コピペするだけですぐ使えますので
よかったら使用してみてください。
カラーインデックス
色の指定方法
コード事態は簡単です。
背景色は
レンジオブジェクト . Interior.ColorIndex = [インデックス番号]
文字色は
レンジオブジェクト . Font.ColorIndex = [インデックス番号]
Sub test_colorIndex()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
'背景色
ws.Cells(2, 2).Interior.ColorIndex = 6
'文字色
ws.Cells(2, 3).Font.ColorIndex = 3
End Sub
使っているとわかると思いますが、
カラーインデックスだけでは、何番がどんな色か全くわかりません。
ヒントもないので、ネットで調べるか、いちいち試していかないといけません。
どちらも面倒だったので
下記の関数を作っていつでも呼び出せるようにしました。
カラーインデックス一覧を呼び出す関数
引数でシート名を文字列で指定します。
そのシート名で新たにシートを作成し、そこにカラーインデックスの一覧を作成します。
既に同名のシート名が存在する場合
上書き処理しますので、その点だけご注意ください。
Function Color_Index(ByVal ws_Name As String)
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name = ws_Name Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next
With ThisWorkbook
Set ws = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count))
End With
ws.Name = ws_Name
ws.Cells(1, 1).Value = "カラー"
ws.Cells(1, 2).Value = "color_index"
ws.Cells(1, 3).Value = "color"
ws.Cells(1, 4).Value = "RGB"
Dim i As Long
Dim color_Val As Long
Dim red, green, blue As Long
i = 2
Do
ws.Cells(i, 1).Interior.ColorIndex = i - 1
color_Val = ws.Cells(i, 1).Interior.Color
ws.Cells(i, 2).Value = i - 1
ws.Cells(i, 3).Value = color_Val
'RGBの計算
blue = color_Val \ 65536
green = (color_Val - blue * 65536) \ 256
red = color_Val - blue * 65536 - green * 256
ws.Cells(i, 4).Value = red & "," & green & "," & blue
i = i + 1
On Error GoTo err
Loop
err:
err.Clear
ws.Range("A1:D1").EntireColumn.AutoFit
End Function
関数の使い方
関数を使用してみます。
Sub test()
Call Color_Index("color_Index")
End Sub
上記のような表をシート上に作ることができます。
B列がカラーインデックス番号なので
例えば赤っぽい色がよければ「3」をインデックス番号として指定してください。
RGBカラーチャート
RGBを指定して色を決める方法です。
RGBは
色の三原色(R=赤、G=緑、B=青)の
パラメータをいじって色を選択します。
といっても色彩素人がこれをいじっていい色を作るなんて不可能なので
実際はインデックス番号やカラー定数を使って色を決めることが多いと思います。
ちなみに、カラー定数というのは
VBAで組み込まれている定数で
例えば「vbYellow」というコードを打つと「黄色」を指定してくれます。
こういったすでに決められた色の定数が150ほどあります。
このカラー定数の一覧を呼び出す関数も作ってあるので
よかったら見てください。
RGBを用いた色の指定方法
カラーインデックスとよく似ています
背景色は
レンジオブジェクト . Interior.Color = RGB ( 0~255 , 0~255 , 0~255 )
文字色は
レンジオブジェクト . Font.Color = RGB ( 0~255 , 0~255 , 0~255 )
実際にコーディングしてみます。
Sub test_RGB()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
'背景色 黄色はRGB(255,255,0)
ws.Cells(2, 2).Interior.Color = rgb(255, 255, 0)
'文字色 赤色はRGB(255,0,0)
ws.Cells(2, 3).Font.Color = rgb(255, 0, 0)
End Sub
RGBの使いどころ
RGBでいい色を出すのは難しいので、
使いどころがなさそうですが、
意外に使いどころは多かったりします。
私はすでにエクセル入力されている「この色を使いたい」色に出くわしたら
RGBを調べます。
調べたRGBと同じ値を入力することで
同じ色に処理したりします。
RGBカラーインデックスを呼び出す関数
RGBカラーインデックスを呼び出す関数です。
先ほどいい色を出すのが難しいという話をしましたが、
黄色っぽい色を出したいからRGBを少しずついじる…
なんてやろうとも思わないと思います。
そこでRGBの値を25刻みで全パターンを一覧として表示する関数を作りました。
25ってざっくりなようですが、パターンとしては1000以上です。
これである程度あたりをつけて微調整するみたいな使い方をしても良いと思います。
Function RGB_chart(ByVal ws_Name As String)
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name = ws_Name Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next
With ThisWorkbook
Set ws = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count))
End With
ws.Name = ws_Name
Dim i, j As Long
Dim reds, greens, blues As Variant
Dim red, green, blue As Variant
Dim rgbs As Variant
Dim arrs As Variant
'RGBの配列を作る25ずつ数値をずらして格納(最後は255になるように調整)
For i = 0 To 249 Step 25
Call add_Elm(arrs, i)
Next i
Call add_Elm(arrs, 255)
reds = arrs
greens = arrs
blues = arrs
For Each red In reds
For Each green In greens
For Each blue In blues
Call add_Elm(rgbs, Array(red, green, blue))
Next
Next
Next
i = 1
j = 1
Dim rgb_ As Variant
For Each rgb_ In rgbs
ws.Cells(i, j).Interior.Color = rgb(rgb_(0), rgb_(1), rgb_(2))
ws.Cells(i, j + 1).Value = Join(rgb_, ",")
If i < 100 Then
i = i + 1
Else
i = 1
j = j + 2
End If
Next
Dim maxCol As Long
maxCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column
ws.Range(ws.Cells(1, 1), ws.Cells(1, maxCol)).EntireColumn.AutoFit
End Function
関数の使い方
関数を使用してみます。
Sub test_RGB_chart()
Call RGB_chart("rgb_chart")
End Sub
ブログ村ランキング参加中です。よかったらフォローお願いします!!