シンボルと一致する 16 進数の色のスプレッドシートがあります。セル自体 (またはその隣のセル) をセル内の 16 進数の色で塗りつぶしたいと考えています。「条件付き書式」について少し読んだことがありますが、それがその方法だと思います。
希望する結果を得るにはどうすればよいですか?
シンボルと一致する 16 進数の色のスプレッドシートがあります。セル自体 (またはその隣のセル) をセル内の 16 進数の色で塗りつぶしたいと考えています。「条件付き書式」について少し読んだことがありますが、それがその方法だと思います。
希望する結果を得るにはどうすればよいですか?
すべての色の条件付き書式では実現できません。
仮定: 行 1 にデータ ラベルが含まれている、データ セットにギャップがない、16 進数の色はフォントではなく塗りつぶし用である、16 進数の色の値 (式ではなく数値) を列 C:E (R、G、B) に解析したこれを頻繁に行う必要がない場合は、ColourCells マクロが適している可能性があります。
Sub ColourCells()
Dim HowMany As Integer
On Error Resume Next
Application.DisplayAlerts = False
HowMany = Application.InputBox _
(Prompt:="Enter last row number.", Title:="To apply to how many rows?", Type:=1)
On Error GoTo 0
Application.DisplayAlerts = True
If HowMany = 0 Then
Exit Sub
Else
Dim i As Integer
For i = 2 To HowMany
Cells(i, 3).Interior.Color = RGB(Cells(i, 3), Cells(i, 4), Cells(i, 5))
Next i
End If
End Sub
プロンプトが表示されたら、n に必要な値を入力します。
サンプル出力と数式など:
Excel の RGB() 関数は実際に BGR 値を作成します (理由を知っている人は誰もいないと思いますが、理由を言っているとは思いません)。そのため、Excel はニブルを逆の順序で表示します。コード Columns3,4,5 は論理的でしたが、奇妙に見えるかもしれないと思った画像の従来の RGB ではなく BGR でした。画像の F の場合、C3 値 ( 「RGB」3 の左側の列) は、RIGHT() を Hex カラーに適用することで得られます。
はるかに簡単です:
ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2))
Mid は先頭の "#" を取り除き、Hex2Dec は 16 進数を VBA が使用できる 10 進数値に変換します。
処理する範囲を選択して、これを実行します。
Sub ColorCellsByHexInCells()
Dim rSelection As Range, rCell As Range
If TypeName(Selection) = "Range" Then
Set rSelection = Selection
For Each rCell In rSelection
rCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(rCell.Text, 2))
Next
End If
End Sub