2009-09-15 41 views

Respuesta

45

Puede utilizar VBA - algo así como

Range("A1:A6").Interior.Color = RGB(127,187,199) 

Sólo tiene que pasar en el valor de la celda.

17

Al establecer la propiedad Color por sí solo, se garantiza 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 utilizan ese color en el 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.

Existen varias estrategias para hacer frente a 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 
+0

Gracias, esto también es muy útil. –

1

Las celdas no se pueden cambiar desde una función de VBA utilizada como fórmula de la hoja de trabajo. Excepto a través de esta solución ...

ponga esta función en un módulo nuevo:

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 

A continuación, utilice esta fórmula en la hoja, por ejemplo en la celda D2:

=HYPERLINK(SetRGB(D2;A2;B2;C2);"HOVER!") 

Una vez que se ciernen el mouse sobre la celda (¡pruébalo!), 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.

0

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 así)

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 que tiene una cadena entonces se puede dividir la cadena en tres números y combinarlos usando rgb().

Cuestiones relacionadas