2012-05-04 42 views
13

Mam arkusz kalkulacyjny z symbolami i pasującymi kolorami heksadecymalnymi. Chcę wypełnić komórkę (lub tę obok niej) kolorem heksadecymalnym w komórce. Czytałem trochę o "formatowaniu warunkowym" i myślę, że jest to sposób na zrobienie tego.Jak podświetlić komórkę, używając wartości koloru szesnastkowego w komórce?

Jak mogę osiągnąć pożądany rezultat?

+5

Nie sądzę formatowanie warunkowe zrobi to za Ciebie. Myślę, że będziesz musiał uruchomić makro, które odczytuje wartość komórki i ustawia "Range (" A1: A6 "). Interior.Color = RGB (200,160,35)'. Co oznacza, że ​​będziesz musiał zrobić matematykę, aby przekonwertować do RGB lub wykorzystać dziwne podejście hexa Excela. – Marc

+0

Uhm knowbody, a może przyjmiesz jedną z 3 odpowiedzi? :) – gsamaras

Odpowiedz

57

Nie można osiągnąć przy użyciu formatowania warunkowego dla wszystkich kolorów.

Założenie: Wiersz1 zawiera etykiety danych, zestaw danych nie ma luk, kolor HEX oznacza wypełnienie, a nie czcionkę, przeanalizowano wartości kolorów HEX (liczby, nie formuły) w kolumnach C: E (R , G, B) i które nie wymagają tego robić często, wówczas ColourCells makro potęga suit:

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 

i wprowadzić żądaną wartość dla n monit.

wyjście próbki i wzory itp:

SO11466034

Excel RGB() funkcja faktycznie tworzy wartość BGR (nie sądzę nikogo, że może wiedzieć dlaczego mówi dlaczego chociaż) tak Excel pokazuje przekąski w Odwrotna kolejność. Dla kodu Columns3,4,5 był logiczny, ale BGR, a nie konwencjonalny RGB na obrazie, który moim zdaniem mógłby wyglądać dziwnie. Dla F na obrazie wartość C3 (kolumna z trzema "RGB" po lewej stronie) pochodzi od zastosowania RIGHT() do koloru heksadecymalnego.

+2

+1 ładnie wykonane. – brettdj

+0

Może zobaczyć, gdzie można to wykorzystać do zilustrowania danych temperatury w znacznie bardziej atrakcyjny sposób, a następnie tylko dane tabelaryczne. +1 – ryyker

+1

@ryyker Dla mapy temperatur (dla temperatur lub innych) [@JonPeltier] (http://peltiertech.com/WordPress/heat-map-excel-conditional-formatting/) może być interesujące. – pnuts

4

znacznie prostsze:

ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2)) 

Mid Odcina wiodącą "#", HEX2DEC zamienia liczby hex na wartość dziesiętną, że VBA można wykorzystać.

więc wybrać zakres przetwarzania i uruchom to:

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 
+0

Czy ta funkcja może zostać zmieniona, aby można ją było zastosować bezpośrednio do formatowania warunkowego? IfHexColour() - tak, że wykrywa # jako pierwszy element, a następnie sprawdza 6 znaków, następnie konwertuje do RGB i ustawia kolor - do aktywnej komórki –

+0

Nie widzę, jak może to obsłużyć wbudowane formatowanie warunkowe. Ale możesz użyć VBA, aby wykryć ciąg rozpoczynający się od #, sprawdzić go jako poprawny ciąg szesnastkowy i odpowiednio pokolorować komórkę. –

10

drobne zmiany, aby odpowiedzieć na Jona Peltiera. Jego funkcja ALMOST działa, ale kolory renderowane są niepoprawne, ponieważ Excel będzie renderował jako BGR zamiast RGB. Oto poprawiona funkcja, która zamienia pary wartości Hex do „poprawny” kolejności:

Sub ColorCellsByHex() 
    Dim rSelection As Range, rCell As Range, tHex As String 

    If TypeName(Selection) = "Range" Then 
    Set rSelection = Selection 
    For Each rCell In rSelection 
     tHex = Mid(rCell.Text, 6, 2) & Mid(rCell.Text, 4, 2) & Mid(rCell.Text, 2, 2) 
     rCell.Interior.Color = WorksheetFunction.Hex2Dec(tHex) 
    Next 
    End If 
End Sub 
+0

O wiele lepiej! Po prostu wybierz zakres i wykonaj makro. To naprawdę dobra odpowiedź. Wielkie dzięki. – Killer

0

W tym celu, userform mogą być wykonane z funkcją HEX2DEC.

Function Hex2Dec(n1 As String) As Long 
    Dim nl1 As Long 
    Dim nGVal As Long 
    Dim nSteper As Long 
    Dim nCount As Long 
    Dim x As Long 
    Dim nVal As Long 
    Dim Stepit As Long 
    Dim hVal As String 

    nl1 = Len(n1) 
    nGVal = 0 
    nSteper = 16 
    nCount = 1 
    For x = nl1 To 1 Step -1 
     hVal = UCase(Mid$(n1, x, 1)) 
     Select Case hVal 
     Case "A" 
      nVal = 10 
     Case "B" 
      nVal = 11 
     Case "C" 
      nVal = 12 
     Case "D" 
      nVal = 13 
     Case "E" 
      nVal = 14 
     Case "F" 
      nVal = 15 
     Case Else 
      nVal = Val(hVal) 
     End Select 
     Stepit = (nSteper^(nCount - 1)) 
     nGVal = nGVal + nVal * Stepit 
     nCount = nCount + 1 
    Next x 
    Hex2Dec = nGVal 
End Function 
... 
UserForm1.TextBox1 = "RGB(" & Hex2Dec(UserForm1.txtHex1.Value) & "," & _ 
      Hex2Dec(UserForm1.txtHex2.Value) & "," & Hex2Dec(UserForm1.txtHex3.Value) & ")" 

Na przykład, wprowadzona wartość do pola tekstowego: # FF8800 - Wynik: RGB (255,136,0)

Powiązane problemy