Saltar al contenido

¿Cómo resaltar una celda usando el valor de color hexadecimal dentro de la celda?

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.:

SO11466034

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

Aquí tienes las comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *