web-dev-qa-db-ja.com

セルの背景色をセル内のデータのRGB値に設定します

RGB値を含む列があります、例えば:

127,187,199
67,22,94

Excelでは、これを使用してセルの背景色を設定する方法はありますか?

28
Internet man

あなたはVBAを使用することができます-のようなもの

Range("A1:A6").Interior.Color = RGB(127,187,199)

セルの値を渡すだけです。

50
Galwegian

Colorプロパティのみを設定すると、完全に一致することが保証されます。 Excel 2003は、一度に56色しか処理できません。幸いなことに、これらの56個のスロット(ColorIndexと呼ばれる)に任意のrgb値を割り当てることができます。 Colorプロパティを使用してセルの色を設定すると、Excelは最も近い「ColorIndex」を使用します。例:セルをRGB 10,20,50(または3281930)に設定すると、実際にはセルが51,51,51(または3355443)であるカラーインデックス56に設定されます。

正確に一致することを確認したい場合は、ColorIndexを目的のRGB値に変更してから、CellのColorIndexをその値に変更する必要があります。ただし、カラーインデックスの値を変更すると、ワークブック内で既にその色を使用しているallセル​​の色が変更されることに注意してください。たとえば、RedはColorIndex 3です。したがって、Redを作成したセルは実際にColorIndex 3を作成しました。ワークブックも紫色に変更されます。

これに対処するには、いくつかの戦略があります。 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
18
Oorang

ワークシートの数式として使用される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!")

マウスをセルの上に置いて(試してみてください!)、背景色がセルから取得したRGBに更新されますA2からC2。フォントの色は、対照的な白または黒です。

3

Sub AddColor()選択範囲内の各セルR = Round(cell.Value)G = Round(cell.Offset(0、1).Value)B = Round(cell.Offset(0、2).Value)Cells(cell .Row、1).Resize(1、4).Interior.Color = RGB(R、G、B)次のセルEnd Sub

R、G、Bの3つの列があると仮定します(この順序で)。最初の列、つまりRを選択します。alt+ F11を押して、上記のコードを実行します。最初の列(Rまたは赤の値を含む)を選択し、値を変更するたびにコードを実行して、変更を反映する必要があります。

この簡単なコードが役立つことを願っています!

0
Amrit Pal Singh

Excelの最新バージョンを使用している場合、現在の整数値に基づいて各セルに色を付けるには、次のようにします。 (古いバージョンはrgbも処理しません)

Sub Colourise()
'
' Colourise Macro
'
' Colours all selected cells, based on their current integer rgb value
' For e.g. (it's a bit backward from what you might expect)
' 255 = #ff0000 = red
' 256*255 = #00ff00 = green
' 256*256*255 #0000ff = blue
' 255 + 256*256*255 #ff00ff = Magenta
' and so on...
'
' Keyboard Shortcut: Ctrl+Shift+C (or whatever you want to set it to)
'
  For Each cell In Selection
    If WorksheetFunction.IsNumber(cell) Then
      cell.Interior.Color = cell.Value
    End If
  Next cell
End Sub

数字の代わりに文字列がある場合は、文字列を3つの数字に分割し、rgb()を使用してそれらを結合できます。

0
Ben Aveling