Después de investigar con expertos en esta materia, programadores de diversas áreas y maestros dimos con la solución a la cuestión y la compartimos en este post.
Solución:
No se puede lograr con formato condicional para todos los colores.
Suponiendo que la fila 1 contiene etiquetas de datos, el conjunto de datos no tiene espacios, el color hexadecimal es para el relleno, no para la fuente, ha analizado los valores de color hexadecimal (números, no fórmulas) en las columnas C:E (R,G,B) y que no necesita hacer esto a menudo, entonces ColourCells macro podría adaptarse:
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 desea para n cuando se le solicite.
Salida de muestra y fórmulas, etc.:
La función RGB () de Excel en realidad crea un valor BGR (no creo que nadie que pueda saber por qué está diciendo por qué), por lo que Excel muestra los nibbles en orden inverso. Para el código Columns3,4,5 era lógico pero BGR en lugar del RGB convencional en la imagen pensé que podría verse extraño. Para F en la imagen el valor C3 (el IZQUIERDA columna de la mano de los tres ‘RGB’) se deriva de aplicar CORRECTO() al color hexadecimal.
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 hexadecimales 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))
Mid quita el “#” inicial, Hex2Dec convierte el número hexadecimal en un valor decimal que VBA puede usar.
Así que 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