una - Excel: establece el color de fondo del valor de celda a rgb de datos en la celda
funcion si color celda (4)
Tengo una columna que contiene valores rgb, por ejemplo
127,187,199
67,22,94
En Excel, ¿hay alguna forma de que pueda usar esto para establecer el color de fondo de la celda?
Establecer la propiedad Color por sí solo garantizará una coincidencia exacta. Excel 2003 solo puede manejar 56 colores a la vez. La buena noticia es que puede asignar cualquier valor de rgb a esas 56 ranuras (que se denominan ColorIndex). Cuando establece el color de una celda usando la propiedad Color, esto hace que Excel use el "ColorIndex" más cercano. Ejemplo: Establecer una celda en RGB 10,20,50 (o 3281930) hará que se establezca en el índice de color 56, que es 51,51,51 (o 3355443).
Si quiere estar seguro de que obtuvo una coincidencia exacta, necesita cambiar un ColorIndex al valor RGB que desea y luego cambiar el ColorIndex de la Celda a dicho valor. Sin embargo, debe tener en cuenta que al cambiar el valor de un índice de color, cambia el color de todas las celdas que ya usan ese color dentro del libro de trabajo. Para dar un ejemplo, Red es ColorIndex 3. Entonces, cualquier celda que haya hecho Rojo realmente haya hecho ColorIndex 3. Y si redefine ColorIndex 3 para que sea, por ejemplo, morado, su celda se volverá púrpura, pero todos los otros glóbulos rojos en el el libro de trabajo también se cambiará a morado.
Hay varias estrategias para lidiar con esto. Una forma es elegir un índice que aún no se utiliza, o solo uno que piense que no será utilizado. Otra forma es cambiar el valor RGB del ColorIndex más cercano para que su cambio sea sutil. El código que publiqué a continuación adopta este enfoque. Aprovechando el conocimiento de que se asigna el ColorIndex más cercano, asigna el valor RGB directamente a la celda (obteniendo así el color más cercano) y luego asigna el valor RGB a ese índice.
Sub Example()
Dim lngColor As Long
lngColor = RGB(10, 20, 50)
With Range("A1").Interior
.Color = lngColor
ActiveWorkbook.Colors(.ColorIndex) = lngColor
End With
End Sub
Las celdas no se pueden cambiar desde una función de VBA utilizada como una fórmula de hoja de cálculo. Excepto a través de esta solución ...
Ponga esta función en un nuevo módulo:
Function SetRGB(x As Range, R As Byte, G As Byte, B As Byte)
On Error Resume Next
x.Interior.Color = RGB(R, G, B)
x.Font.Color = IIf(0.299 * R + 0.587 * G + 0.114 * B < 128, vbWhite, vbBlack)
End Function
Luego use esta fórmula en su hoja, por ejemplo en la celda D2
:
=HYPERLINK(SetRGB(D2;A2;B2;C2);"HOVER!")
Una vez que coloca el mouse sobre la celda (¡pruébelo!), El color de fondo se actualiza al RGB tomado de las celdas A2
a C2
. El color de la fuente es un blanco o negro que contrasta.
Para colorear cada celda en función de su valor entero actual, lo siguiente debería funcionar, si tiene una versión reciente de Excel. (Las versiones anteriores no manejan rgb también)
Sub Colourise()
''
'' Colourise Macro
''
'' Colours all selected cells, based on their current integer rgb value
'' For e.g. (it''s a bit backward from what you might expect)
'' 255 = #ff0000 = red
'' 256*255 = #00ff00 = green
'' 256*256*255 #0000ff = blue
'' 255 + 256*256*255 #ff00ff = magenta
'' and so on...
''
'' Keyboard Shortcut: Ctrl+Shift+C (or whatever you want to set it to)
''
For Each cell In Selection
If WorksheetFunction.IsNumber(cell) Then
cell.Interior.Color = cell.Value
End If
Next cell
End Sub
Si en lugar de un número tiene una cadena, entonces puede dividir la cadena en tres números y combinarlos usando rgb ().
Puede usar VBA, algo así como
Range("A1:A6").Interior.Color = RGB(127,187,199)
Solo pase el valor de la celda.