スポンサーリンク
自宅でいつものようにプログラムを作成していると、色付けを行う処理で、思っていた色とは違う色が設定されたことに気付きました。これはおかしいと思い調査を行ったので、本記事ではその調査について紹介をします。
結論
先に結論を書きます。2020/04/21現在では、Excelの色付け(FONT.ColorIndex、Interior.ColorIndex)は不具合が起きているようで、正常に色の設定ができない様子でした。不具合を確認できなかった色付け処理は、FONT.Color、Interior.Colorでの処理でした。まとめると次のようになります。
- 文字に色を付ける時は、.FONT.Colorを使うと良い。
例:.Cells(1,1).FONT.Color または .Range("A1").FONT.Color - セルの背景(文字の背景)に色を付ける時は、.Interior.Colorを使うと良い。
例:.Cells(1,1).Interior.Color または .Range("A1").Interior.Color - 文字に色を付ける.FONT.ColorIndexは、一部正常に色が付かない不具合がある様子が見られる。
例:.Cells(1,1).FONT.ColorIndex または .Range("A1").FONT.ColorIndex - セルの背景(文字の背景)は、一部正常に色が付かない不具合がある様子が見られるが、.Interior.ColorIndexを使うと良い。
例:.Cells(1,1).Interior.ColorIndex または .Range("A1").Interior.ColorIndex
環境
今回、私が調査を行った際のPC環境は以下の通りです。
- Windows 10 Home(バージョン:1909、OSビルド:18363.778)
- Excel(Microsoft Office ProPlus)
スポンサーリンク
行った調査
今回の調査はプログラムを作成して実施しました。まずはこちらをご覧下さい。
こちらはExcelのスクリーンショットです。プログラムは、それぞれの表の「文字名」列に設定されている色の値を.Colorまたは.ColorIndexで取得して、取得した値を基に、「設定(Color)」列、「設定(ColorIndex)」列に色付け処理を行う流れとなっています。なお、各行の色はエクセルのツールバーの色であり、ツールバーの左から右へ設定しています。
プログラム処理をかけると、下の画像のようになります。
もうお気付きになった方もおられると思いますが、見ての通り「文字色」列と「設定(Color)」列の色は同色です。一方、「文字色」列と「設定(ColorIndex)」列の色が違っており、番号「4-0」の「ブルーグレー、テキスト 2」はColorIndexで色付けすると、緑っぽい色になってしまいます。あと、「青、アクセント 1」も本来の色より濃くなってしまいます。
スポンサーリンク
実行プログラム
文字色の調査は、次の画像のプログラムで実施しました。
共通の関数
共通する関数は下の画像でご確認下さい。
Function GetRGB(ByVal ColorIndex As Long) As Object
myDic.RemoveAll
Dim Red As Long: Red = ColorIndex Mod 256
myDic.Add "Red", Red
Dim Green As Long: Green = Int(ColorIndex / 256) Mod 256
myDic.Add "Green", Green
Dim Blue: Blue = Int(ColorIndex / 256 / 256)
myDic.Add "Blue", Blue
Set GetRGB = myDic
End Function
文字色の関数
実行する前にシートの初期設定が必要です。
設定内容はシート「文字色」を追加し、表は「B2」から作成しましょう。
Option Explicit
Public myDic As Object
Sub checkColor_文字色FONT()
Dim colorVar As Long
Dim Color_R As Integer
Dim Color_G As Integer
Dim Color_B As Integer
Set myDic = CreateObject("Scripting.Dictionary")
Dim MAINSHEET As String
MAINSHEET = "文字色"
With Worksheets(MAINSHEET)
Dim i As Integer
For i = 3 To 73
colorVar = .Range("E" & i).FONT.Color
Set myDic = GetRGB(colorVar)
Color_R = myDic.Item("Red")
Color_G = myDic.Item("Green")
Color_B = myDic.Item("Blue")
.Range("F" & i) = colorVar & " = " & "R:" & Color_R & ", G:" & Color_G & ", B:" & Color_B
.Range("G" & i).FONT.Color = colorVar
colorVar = .Range("E" & i).FONT.ColorIndex
.Range("H" & i) = colorVar
.Range("I" & i).FONT.ColorIndex = colorVar
Next i
End With
End Sub
スポンサーリンク
背景色の関数
実行する前にシートの初期設定が必要です。
設定内容はシート「背景色」を追加し、表は「B2」から作成しましょう。
Option Explicit
Public myDic As Object
Sub checkColor_背景色Interior()
Dim colorVar As Long
Dim Color_R As Integer
Dim Color_G As Integer
Dim Color_B As Integer
Set myDic = CreateObject("Scripting.Dictionary")
Dim MAINSHEET As String
MAINSHEET = "背景色"
With Worksheets(MAINSHEET)
Dim i As Integer
For i = 3 To 73
colorVar = .Range("E" & i).Interior.Color
Set myDic = GetRGB(colorVar)
Color_R = myDic.Item("Red")
Color_G = myDic.Item("Green")
Color_B = myDic.Item("Blue")
.Range("F" & i) = colorVar & " = " & "R:" & Color_R & ", G:" & Color_G & ", B:" & Color_B
.Range("G" & i).Interior.Color = colorVar
colorVar = .Range("E" & i).Interior.ColorIndex
.Range("H" & i) = colorVar
.Range("I" & i).Interior.ColorIndex = colorVar
Next i
End With
End Sub
参考
以下の情報を参考にさせて頂きました。
VBAでオブジェクトを戻り値としてセットする方法。 - Qiita
最後までお付き合いいただきありがとうございます!
この情報が誰かの役にたてれば幸いです。