una - como imprimir en excel varias hojas
Fórmula de Excel que imprime el color de la celda(ColorIndex o RGB) (3)
Aquí hay algunas funciones pequeñas para ti. Desde su hoja, presione Alt - F11 para llegar al editor de VBA, inserte un nuevo módulo, pegue el siguiente código, regrese a su hoja de trabajo y utilícelos por sus nombres, como in =FillColor(A1)
Los primeros dos son los prometidos "3-liners" que dan valores decimales para los colores de fuente y de fondo, aunque no son muy útiles.
El segundo par convierte el número decimal a RGB y devuelve una cadena de formato N, N, N
El tercer par son fórmulas de matriz : seleccione 3 celdas en una fila, ingrese la fórmula y presione Ctrl + Mayús + Entrar para obtener valores RGB numéricos en 3 celdas vecinas
Function FillColor(Target As Range) As Variant
FillColor = Target.Interior.Color
End Function
Function FontColor(Target As Range) As Variant
FontColor = Target.Font.Color
End Function
Function FillColorRGB(Target As Range) As Variant
Dim N As Double
N = Target.Interior.Color
FillColorRGB = Str(N Mod 256) & ", " & Str(Int(N / 256) Mod 256) & ", " & Str(Int(N / 256 / 256) Mod 256)
End Function
Function FontColorRGB(Target As Range) As Variant
Dim N As Double
N = Target.Font.Color
FontColorRGB = Str(N Mod 256) & ", " & Str(Int(N / 256) Mod 256) & ", " & Str(Int(N / 256 / 256) Mod 256)
End Function
Function FillColorRGBArray(Target As Range) As Variant
Dim N As Double, A(3) As Integer
N = Target.Interior.Color
A(0) = N Mod 256
A(1) = Int(N / 256) Mod 256
A(2) = Int(N / 256 / 256) Mod 256
FillColorRGBArray = A
End Function
Function FontColorRGBArray(Target As Range) As Variant
Dim N As Double, A(3) As Integer
N = Target.Font.Color
A(0) = N Mod 256
A(1) = Int(N / 256) Mod 256
A(2) = Int(N / 256 / 256) Mod 256
FontColorRGBArray = A
End Function
Una advertencia : cambiar el color de una celda no comienza el recálculo por las funciones / fórmulas anteriores, ya que no se supone que la recolocación de una celda genere recálculo. Tienes que iniciar manualmente un recálculo completo usando Ctrl + Alt + Shift + F9
¿Existe, en Excel, una Fórmula que recupera el ColorIndex (o RGB) de una celda?
Encontré la siguiente función:
CELL(info_type, the_cell)
documentado aquí , pero no tiene ninguna información de referencia para el color de la celda.
Es una información de color
, pero es inútil para mí. De hecho, se describe de la siguiente manera:
"color"
El valor 1 si la celda está formateada en color para valores negativos; de lo contrario, devuelve 0 (cero).
¿Alguna idea?
Además, resultó que la propiedad de VBA que hace esto es Cell.Interior.Color
pero en realidad no estoy usando Macros, sino simples fórmulas de Excel. ¿Hay alguna forma de emular las funciones de VBA con una fórmula?
La siguiente función mostrará el valor RGB de una celda seleccionada.
Function CellColorValue(CellLocation As Range)
Dim sColor As String
Application.Volatile
''Retrieve hex value into string sColor
sColor = Right("000000" & Hex(CellLocation.Interior.Color), 6)
''Return the string Version e.g. 255,255,255 RGB color value found in
''Excel cell. Use in built worksheet function to convert Hex to Decimal
''Use string function to separate Hex string into three parts
CellColorValue = Application.WorksheetFunction.Hex2Dec(Right(sColor, 2)) & "," & application.WorksheetFunction.Hex2Dec(Mid(sColor, 3, 2)) & "," & Application.WorksheetFunction.Hex2Dec(Left(sColor, 2))
End Function
por favor intente con abajo
Cambios realizados: vea el comentario en el código
Módulo
Public Function Performance_Message(NonPreferredAvg As Single _
, NonPreferredAvgname As String _
, PreferredAvg As Single _
, PreferredAvgname As String _
, Optional Outputtype As String _
) As Variant
Dim performancemessage As String
Dim averagedifference As Single
Dim stravgdif As String
Dim cellcolor As String
averagedifference = Abs(NonPreferredAvg - PreferredAvg)
stravgdif = FormatPercent(averagedifference, 2)
Select Case PreferredAvg
Case Is < NonPreferredAvg
performancemessage = PreferredAvgname & " Is " & stravgdif & " Less Than " & NonPreferredAvgname
cellcolor = 4 ''"green" ''Changes made
Case Is = NonPreferredAvg
performancemessage = PreferredAvgname & " Equals " & NonPreferredAvgname
cellcolor = 6 ''"yellow" ''''Changes made
Case Is > NonPreferredAvg
performancemessage = PreferredAvgname & " Is " & stravgdif & " Greater Than " & NonPreferredAvgname
cellcolor = 5 ''"blue" ''Changes made
Case Else
performancemessage = "Something Bad Happened"
End Select
If Outputtype = "color" Then
Performance_Message = cellcolor
Else
Performance_Message = performancemessage
End If
End Function
Hoja de cálculo
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myColor As Double
myColor = Target.Value ''''Changes made
Call SetPerformancecolor(Target, myColor)
End Sub
Private Sub SetPerformancecolor(Target As Range, myColor As Double)
Target.Interior.ColorIndex = myColor ''''Changes made
End Sub