我正在使用以下代码将B列中的重复值设置为红色。我不记得它的来源。我添加了计数器和msgbox,以查看发生了什么事。 B列中的重复值以红色突出显示。
Sub formatduplicates2()
Dim rg As Range
Dim cf As FormatCondition
Dim datax As Range
Dim xcolor As Long
Dim colorcount
Dim count
colorcount = 1
Set rg = Range("B17", Range("B17").End(xlDown))
Set cf = rg.FormatConditions.Add(Type:=xlExpression, Formula1:="=COUNTIF(B$17:B17,B17)>1")
cf.Interior.Color = RGB(255, 0, 0)
For Each datax In rg
count = count + 1
If count = 10000 Then
MsgBox count
End If
Next datax
End Sub
我正在使用以下功能对所有红细胞进行计数。这是来自Ozgrid。如果我手动更改单元格的背景颜色,它将起作用。
该函数看不到使用上面的代码更改的单元格。当我手动检查B列中的单元格的背景颜色(明显为红色的单元格)时,Excel告诉我RGB设置为0,0,0(无填充)。重新计算或保存并重新打开文件的数量不会更改任何内容。单元格显示为红色,但与之关联的数据为“未填充”。
我的目标是计算给定背景的细胞。
Function ColorFunction(rColor As Range, rRange As Range, Optional StrCond As String) As Long
Dim rCell As Range
Dim lCol As Long
Dim vResult As Long
lCol = rColor.Interior.Color
For Each rCell In rRange
If rCell.Interior.Color = lCol Then
If StrCond <> "" Then
If rCell.Value = StrCond Then
vResult = vResult + 1
End If
Else
vResult = vResult + 1
End If
End If
Next rCell
ColorFunction = vResult
End Function
答案 0 :(得分:0)
如果您要使用条件格式对单元格进行着色,使用公式来确定要格式化的单元格,则该UDF将计算具有该颜色的单元格数量(改编自Microsoft Community)。 / p>
通常可以通过使用范围的DisplayFormat.Interior.Color
而不是其Interior.Color
来确定通过条件格式应用的颜色。如果您修改了ColorFunction
以查看rCell.DisplayFormat.Interior.Color
并在Sub
中使用了该功能,即类似这样,它将正常工作。
Sub Test
Range("A2").Value = ColorFunction(Range("A1"), Range("B17:B20"))
End Sub
但是ColorFunction
不能作为UDF使用-您的#Value!
错误如注释中所述。我不确定原因,但显然使用Range.DisplayFormat
不能用于UDF。因此,要拥有UDF,您需要遍历每个范围并评估与条件格式关联的公式。
该方法有两个轻微的皱纹:
FormatCondition
中的哪个Range
。FormatCondition
相关联的公式(在您的原始情况下为=COUNTIF(B$17:B17,B17)>1
)将不会自动更新相对引用(如果有)。您需要使用Application.ConvertFormula
,从 A1 转换为 R1C1 (并返回到 A1 )参考样式,同时使用 RelativeTo 参数以更新相对引用。Function CountConditionColorCells(CellsRange As Range, ColorRng As Range) As Long
Dim RightCF As Boolean
Dim CFformula As String
Dim CFCELL As Range
Dim CFcounter, CFtrueCounter As Long, CFCellCounter As Long
' Determines which conditional format to consider, if multiple
For CFcounter = 1 To CellsRange.FormatConditions.Count
If CellsRange.FormatConditions(CFcounter).Interior.ColorIndex = ColorRng.Interior.ColorIndex Then
RightCF = True
Exit For
End If
Next CFcounter
If RightCF Then
For Each CFCELL In CellsRange
CFformula = CFCELL.FormatConditions(CFcounter).Formula1
CFformula = Application.ConvertFormula(CFformula, xlA1, xlR1C1)
CFformula = Application.ConvertFormula(CFformula, xlR1C1, xlA1, , _
ActiveCell.Resize(CellsRange.Rows.Count, CellsRange.Columns.Count).Cells(CFCellCounter + 1))
If Evaluate(CFformula) Then CFtrueCounter = CFtrueCounter + 1
CFCellCounter = CFCellCounter + 1
Next CFCELL
Else
Exit Function ' Returns 0
End If
CountConditionColorCells = CFtrueCounter
End Function
屏幕截图