
Este problema tiene varias partes:
-Separar el código en sus tres campos hexadecimales.
-Convertir esos campos a decimal.
-Obtener el color correspondiente a esos campos.
Comencemos por el primer punto. Supongamos que el primer código está en [A2]. Separamos sus campos con tres funciones para manejo de texto:
Primer campo, =IZQUIERDA(A2;2) Segundo campo, =EXTRAE(A2;3;2) Tercer campo, =DERECHA(A2;2)
La primera función separa los dos caracteres a la izquierda del código. La segunda separa dos caracteres, contando a partir del tercero. La última función separa los dos caracteres de la derecha. Ahora tenemos que convertir estos dígitos hexadecimales a base decimal. Podemos hacerlo con la función HEX.A.DEC. Por ejemplo, si extrajimos los dos caracteres de la izquierda en la celda [B2], la fórmula es =HEX.A.DEC(B2). Hacemos lo mismo con los otros dos campos. Finalmente, aplicamos el color con una macro:
Sub colores() For i = 2 To 12
Cells(i, “H”).Interior.Color = _
RGB(Cells(i, “E”), _
Cells(i, “F”), _
Cells(i, “G”)) Next End Sub
Esta macro aplica en la columna [H] el color RGB correspondiente a los decimales obtenidos en las columnas [E], [F] y [G].
Pero me parece más prolijo de la siguiente forma
Sub Colores()
Hoja = ThisComponent.getSheets().getByIndex(0)
Dim lVar As Long
Dim celda2 As Object
for i=1 to 12
Celda2 = Hoja.getCellByPosition(7,i)
lvar=rgb(Hoja.getCellByPosition(4,i).value,Hoja.getCellByPosition(5,i).value,Hoja.getCellByPosition(6,i).value)
celda2.CellBackColor=lvar
Celda2.String = lvar
NEXT I
End Sub
Para los que quieran la misma función pero en formato Open Document
Solo hay que hacer algunos cambios en la macro, queda un poco más larga.
Sub Colores()
Hoja = ThisComponent.getSheets().getByIndex(0)
for i=1 to 12
Hoja.getCellByPosition(7,i).CellBackColor=rgb(Hoja.getCellByPosition(4,i).value,Hoja.getCellByPosition(5,i).value,Hoja.getCellByPosition(6,i).value)
NEXT I
End Sub