RGB 値を含む列があります。
127,187,199
67,22,94
Excel で、これを使用してセルの背景色を設定する方法はありますか?
VBAを使用できます-次のようなもの
Range("A1:A6").Interior.Color = RGB(127,187,199)
セル値を渡すだけです。
Color プロパティのみを設定すると、完全に一致することが保証されます。Excel 2003 では、一度に 56 色しか処理できません。幸いなことに、これらの 56 個のスロット (ColorIndex と呼ばれます) には、任意の RGB 値を割り当てることができます。Color プロパティを使用してセルの色を設定すると、Excel は最も近い "ColorIndex" を使用します。例: セルを RGB 10,20,50 (または 3281930) に設定すると、実際にはカラー インデックス 56、つまり 51,51,51 (または 3355443) に設定されます。
完全に一致したことを確認したい場合は、ColorIndex を必要な RGB 値に変更してから、Cell の ColorIndex をその値に変更する必要があります。ただし、カラー インデックスの値を変更すると、ワークブック内で既にその色を使用しているすべてのセルの色が変更されることに注意してください。例を挙げると、赤は ColorIndex 3 です。したがって、赤にしたセルは実際には ColorIndex 3 になりました。また、ColorIndex 3 を紫に再定義すると、セルは実際に紫になりますが、ワークブックも紫に変わります。
これに対処するには、いくつかの戦略があります。1 つの方法は、まだ使用されていないインデックス、または使用される可能性が低いと思われるインデックスを選択することです。もう 1 つの方法は、最も近い ColorIndexの RGB 値を変更して、変更が微妙になるようにすることです。以下に投稿したコードは、このアプローチを採用しています。最も近い ColorIndex が割り当てられているという知識を利用して、RGB 値をセルに直接割り当て (それによって最も近い色が得られます)、次に RGB 値をそのインデックスに割り当てます。
Sub Example()
Dim lngColor As Long
lngColor = RGB(10, 20, 50)
With Range("A1").Interior
.Color = lngColor
ActiveWorkbook.Colors(.ColorIndex) = lngColor
End With
End Sub
ワークシートの数式として使用される VBA 関数内からセルを変更することはできません。この回避策を除いて...
この関数を新しいモジュールに入れます。
Function SetRGB(x As Range, R As Byte, G As Byte, B As Byte)
On Error Resume Next
x.Interior.Color = RGB(R, G, B)
x.Font.Color = IIf(0.299 * R + 0.587 * G + 0.114 * B < 128, vbWhite, vbBlack)
End Function
次に、セルなどのシートでこの式を使用しますD2
。
=HYPERLINK(SetRGB(D2;A2;B2;C2);"HOVER!")
マウスをセルの上に置くと (試してみてください!)、背景色がセルA2
から取得した RGB に更新されC2
ます。フォントの色は対照的な白または黒です。