打印单元格颜色的Excel公式(ColorIndex或RGB)

Excel中是否有一个检索单元格的ColorIndex(或RGB)的公式?

我发现了以下function:

CELL(info_type, the_cell) 

这里logging ,但它没有任何细胞颜色的参考信息。

这是一个color信息,但对我来说没用。 事实上,它被描述如下:

"color"如果单元格的颜色格式为负值,则值为1; 否则返回0(零)。

任何想法?

另外,我发现这样做的VBA属性是Cell.Interior.Color但实际上我没有使用macros,但简单的Excel公式。 有没有办法用公式模拟VBA函数?

这里有一些小function给你。 在你的工作表中,按AltF11进入VBA编辑器,插入一个新模块,粘贴下面的代码,返回工作表并使用它们的名字,如in =FillColor(A1)

前两个是承诺的“三行”给字体和背景颜色的十进制值 – 虽然不是很有用

第二对将十进制数转换为RGB,并返回一个格式为N,N,N的string

第三对是数组公式 – 在一行中select3个单元格,input公式并按下Ctrl + Shift + Enter可在3个相邻单元格中获得数字RGB值

 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 

谨慎的一句话 :改变一个单元格的颜色并不能通过上面的函数/公式重新计算,因为重新着色一个单元格通常不会导致重新计算。 您必须使用Ctrl + Alt + Shift + F9手动开始完整的重新计算

以下function将显示所选单元格的RGB值。

 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 eg 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 

请尝试下面

所做的更改:请参阅代码中的注释

 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 

工作表

 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