web-dev-qa-db-ger.com

Wie markiere ich eine Zelle mit dem Hex-Farbwert innerhalb der Zelle?

Ich habe eine Tabelle mit Symbolen und passenden Hex-Farben. Ich möchte die Zelle selbst (oder die daneben liegende) mit der Hex-Farbe in der Zelle füllen. Ich habe ein bisschen über "bedingte Formatierung" gelesen, und ich denke, das ist der Weg, dies zu tun.

Wie kann ich das gewünschte Ergebnis erzielen?

16
knowbody

Kann nicht mit der bedingten Formatierung für alle Farben erreicht werden.

Angenommen: Zeile1 enthält Datenbeschriftungen, Datensatz hat keine Lücken, die HEX-Farbe ist für die Füllung nicht die Schriftart, Sie haben die HEX-Farbwerte (Zahlen, nicht Formeln) in Spalten C: E (R, G, B) analysiert. Wenn Sie dies nicht oft tun müssen, ist das ColourCells-Makro möglicherweise passend:

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

und geben Sie den gewünschten Wert für n ein, wenn Sie dazu aufgefordert werden.

Beispielausgabe und Formeln usw.:

SO11466034

Die RGB () - Funktion von Excel erstellt tatsächlich einen BGR-Wert (ich glaube nicht, dass jemand weiß, warum dies so ist), so dass in Excel die Nibbles in umgekehrter Reihenfolge angezeigt werden. Für den Code Columns3,4,5 war logisch, aber eher BGR als das herkömmliche RGB in dem Bild, von dem ich dachte, dass es ungerade aussehen könnte. Für F im Bild wird der C3-Wert (die LEFT -Handspalte der 'RGB'-Drei) durch Anwenden von RIGHT () auf die Hex-Farbe abgeleitet.

66
pnuts

Kleine Bearbeitung der Antwort von Jon Peltier. Seine Funktion ALMOST funktioniert, aber die Farben, die er rendert, sind falsch, da Excel als BGR anstelle von RGB dargestellt wird. Hier ist die korrigierte Funktion, die die Paare von Hex-Werten in die 'richtige' Reihenfolge vertauscht:

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
18
user3646932

Viel einfacher:

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

In der Mitte wird das führende "#" entfernt, Hex2Dec wandelt die Hex-Zahl in einen Dezimalwert um, den VBA verwenden kann.

Wählen Sie also den zu verarbeitenden Bereich aus und führen Sie Folgendes aus:

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
5
Jon Peltier

Hierzu kann mit der Hex2Dec-Funktion ein Benutzerformular erstellt werden.

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) & ")"

Zum Beispiel: der eingegebene Wert in das Textfeld: # FF8800 - Ergebnis: RGB (255,136,0)

0
kadrleyn