una - excel resaltar celda si
¿Cómo resaltar una celda usando el valor de color hexadecimal dentro de la celda? (4)
Tengo una hoja de cálculo con símbolos y colores hexagonales coincidentes. Quiero llenar la celda misma (o la que está junto a ella) con el color hexadecimal dentro de la celda. He leído un poco sobre el "formato condicional", y creo que esa es la manera de hacerlo.
¿Cómo podría lograr el resultado que me gustaría?
Edición menor a la respuesta de Jon Peltier. Su función CASI funciona, pero los colores que representa son incorrectos debido a que Excel se representará como BGR en lugar de RGB. Aquí está la función corregida, que intercambia los pares de valores Hex en el orden ''correcto'':
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
Mucho más simple:
ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2))
Media distancia del "#" inicial, Hex2Dec convierte el número hexadecimal en un valor decimal que VBA puede usar.
Por lo tanto, seleccione el rango para procesar y ejecute esto:
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
Para esto, se puede hacer una forma de usuario con la función 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) & ")"
Por ejemplo, el valor ingresado al cuadro de texto: # FF8800 - Resultado: RGB (255,136,0)
No se puede lograr con el formato condicional para todos los colores.
Asumiendo: Row1 contiene etiquetas de datos, el conjunto de datos no tiene espacios, el color HEX es para el relleno, no la fuente, ha analizado los valores de color HEX (números, no fórmulas) en columnas C: E (R, G, B) y que no necesita hacer esto a menudo, entonces la macro ColourCells podría ser adecuada para:
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
e ingrese el valor que desee para n cuando se le solicite.
Muestra de salida y fórmulas, etc.
La función RGB () de Excel realmente crea un valor BGR (no creo que nadie que sepa por qué dice por qué) Excel muestra nibbles en orden inverso. Para el código Columns3,4,5 era lógico, pero BGR en lugar del RGB convencional en la imagen que pensé que podría parecer extraño. Para F en la imagen, el valor de C3 (la columna de la mano IZQUIERDA del ''RGB'' tres) se deriva de aplicar DERECHA () al color Hex.