Mam kolumny zawierającej wartości RGB, npExcel: Ustaw kolor tła komórki na RGB wartości danych w komórce
127,187,199
67,22,94
W programie Excel, czy jest jakiś sposób mogę to wykorzystać, aby ustawić kolor tła komórka?
Mam kolumny zawierającej wartości RGB, npExcel: Ustaw kolor tła komórki na RGB wartości danych w komórce
127,187,199
67,22,94
W programie Excel, czy jest jakiś sposób mogę to wykorzystać, aby ustawić kolor tła komórka?
Można użyć VBA - coś jak
Range("A1:A6").Interior.Color = RGB(127,187,199)
Wystarczy przekazać wartości komórki.
Ustawienie samej właściwości Kolor zagwarantuje dokładne dopasowanie. Program Excel 2003 może obsłużyć tylko 56 kolorów jednocześnie. Dobrą wiadomością jest to, że możesz przypisać dowolną wartość rgb do tych 56 gniazd (które są nazywane ColorIndex). Po ustawieniu koloru komórki za pomocą właściwości Kolor spowoduje to, że program Excel użyje najbliższego "Koloru". Przykład: Ustawienie komórki na RGB 10,20,50 (lub 3281930) spowoduje, że zostanie ustawione na indeks koloru 56, który wynosi 51.51,51 (lub 3355443).
Jeśli chcesz mieć pewność, że masz dokładne dopasowanie, musisz zmienić ColorIndex na żądaną wartość RGB, a następnie zmienić ColorIndex komórki na tę wartość. Należy jednak pamiętać, że zmieniając wartość indeksu kolorów, zmienia się kolor komórek już korzystających z tego koloru w skoroszycie. Aby podać przykład, czerwony to ColorIndex 3. Tak więc każda komórka, którą zrobiłeś, zmieniła się w ColorIndex 3. Jeśli zmienisz definicję ColorIndex 3 na fioletowy, twoja komórka rzeczywiście stanie się fioletowa, ale wszystkie inne czerwone komórki w skoroszyt zostanie również zmieniony na fioletowy.
Istnieje kilka strategii radzenia sobie z tym. Jednym ze sposobów jest wybór indeksu, który nie jest jeszcze w użyciu, lub tylko taki, który według Ciebie nie będzie prawdopodobnie używany. Innym sposobem jest zmiana wartości RGB na najbliższy ColorIndex, więc zmiana będzie subtelna. Kod, który napisałem poniżej, stosuje to podejście. Korzystając z wiedzy, że najbliższy ColorIndex jest przypisany, przypisuje wartość RGB bezpośrednio do komórki (tym samym uzyskując najbliższy kolor), a następnie przypisuje wartość RGB do tego indeksu.
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
Komórki nie można zmienić z poziomu funkcji VBA używanej jako formuła arkusza roboczego. Tylko za pośrednictwem tego obejścia ...
Umieść tę funkcję do nowego modułu:
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
następnie wykorzystać tę formułę w arkuszu, na przykład w komórce D2
:
=HYPERLINK(SetRGB(D2;A2;B2;C2);"HOVER!")
Po najechaniu mysz nad komórką (spróbuj!), kolor tła aktualizuje RGB z komórek A2
do C2
. Kolor czcionki jest kontrastowy, biały lub czarny.
Aby pokolorować każdą komórkę na podstawie jej bieżącej wartości całkowitej, następujące czynności powinny działać, jeśli masz najnowszą wersję programu Excel. (Starsze wersje nie obsługują rgb również)
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
Jeśli zamiast numeru masz ciąg następnie można podzielić na trzy ciąg liczb i połączyć je za pomocą RGB().
Dzięki, jest to również bardzo pomocne. –