对特定颜色的单元格进行计数的VBA代码;达到第二种指定颜色后循环(并显示计数)

对特定颜色的单元格进行计数的VBA代码;达到第二种指定颜色后循环(并显示计数),vba,excel,Vba,Excel,我正在处理一个VBA代码,该代码将计算指定颜色的单元格在单元格范围内出现的次数;例如,使用黄色对范围内的所有单元格进行计数 以下VBA代码完成此任务: Function CountCcolor(range_data As Range, criteria As Range) As Long Dim datax As Range Dim xcolor As Long xcolor = criteria.Interior.ColorIndex For Each datax In ran

我正在处理一个VBA代码,该代码将计算指定颜色的单元格在单元格范围内出现的次数;例如,使用黄色对范围内的所有单元格进行计数

以下VBA代码完成此任务:

Function CountCcolor(range_data As Range, criteria As Range) As Long
    Dim datax As Range
    Dim xcolor As Long
xcolor = criteria.Interior.ColorIndex
For Each datax In range_data
    If datax.Interior.ColorIndex = xcolor Then
        CountCcolor = CountCcolor + 1
    End If
Next datax
End Function
我一直在尝试向代码中添加一个循环,每次出现另一种指定颜色(例如紫色)时,该循环都会循环。在循环之前,我希望显示上一个值,然后将计数重置为0


执行函数时,通过选择一个单元格输入条件,该单元格是函数将要查找和计数的颜色。这也是从工作表中调用的

有人对此有什么建议或解决方案吗

编辑:

我正在尝试创建一个函数,该函数将遍历如下所示的数据:

总而言之,电子表格中有185000行,因此显示不需要位于特定位置,它可能只是一个数字数组,我可以将其绘制成直方图以显示频率范围

Function CountCcolor(range_data As Range, criteria As Range, log_page As Range) As Long
    Dim datax As Range
    Dim xcolor As Long
    Dim ycolor As Long

xcolor = criteria.Interior.ColorIndex
ycolor = log_page.Interior.ColorIndex

For Each datax In range_data
    If datax.Interior.ColorIndex = xcolor Then
        CountCcolor = CountCcolor + 1
        ElseIf datax.Interior.ColorIndex = ycolor Then
            Debug.Print CountCcolor
            CountCcolor = 0
    End If
Next datax
End Function
在代码中,范围_数据是注释列,通过选择仅包含黄色的空单元格来选择标准,日志_页面也通过选择仅包含紫色的空单元格来选择(日志_页面表示我希望代码打印总计、清除计数然后循环的位置)

我已经能够编写一个函数,能够正确地计算整个电子表格中所有黄色的行;但是,我们无法使其按照紫色行正确循环和显示输出


谢谢大家!

所以我将您的代码修改为这个,它工作得很好

Sub CountCColor(range_data As Range, x As Range, y As Range)
    Dim datax As Range
    Dim xcolor As Long
    Dim ycolor As Long
    Dim CountCColor1 As Integer

xcolor = x.Interior.ColorIndex
ycolor = y.Interior.ColorIndex


For Each datax In range_data
    If datax.Interior.ColorIndex = xcolor Then
        CountCColor1 = CountCColor1 + 1
        ElseIf datax.Interior.ColorIndex = ycolor Then
            Debug.Print CountCColor1
            CountCColor1 = 0
    End If
Next datax
End Sub
所以我真的不知道你的问题在哪里,或者你在寻找什么。但你可能想看看这个。这就是你提到的频率范围。我已经硬编码了颜色,因为我很懒,我不知道如果只有两种你想数一数的颜色,为什么还要把它们保存在一个额外的单元格里。但该宏计算arr(0,…)中的黄色单元格以及arr(1,…)中出现紫色线时的行数。每次点击紫色线,它都会增加索引

Sub Test(range_data As Range)
Dim cell As Range
Dim arr() As Integer, i As Integer: i = 0
Dim yFirst
Dim y As Long, p As Long
y = RGB(255, 255, 0)
p = RGB(112, 48, 160)

ReDim Preserve arr(1, 0)

For Each cell In range_data
    If cell.Interior.Color = y Then
        arr(0, i) = arr(0, i) + 1
    ElseIf cell.Interior.Color = p Then
        arr(1, i) = cell.Row
        Debug.Print (arr(0, i) & " " & arr(1, i))
        i = i + 1
        ReDim Preserve arr(1, i)
    End If
Next
End Sub
因此,输出将如下所示。在第1行中是一个紫色单元格,前面没有黄线,然后在紫色行1和41之间有2条黄线。等等你也应该考虑,如果你只在紫色线出现时打印值,如果最后一行是黄色的,它就不会打印。

听起来您需要的是子过程而不是函数。您的意思是希望能够通过多单元格
标准
范围吗?您是从工作表还是从另一个VBA过程调用它?退一步-谁/什么在确定范围的颜色?是“随机”还是可能存在条件格式/某些逻辑来解释为什么单元格是某种颜色?执行函数时,通过选择一个单元格输入条件,该单元格是函数将要查找和计数的颜色。这也是从工作表中调用的。@BruceWayne范围的颜色是使用过滤器确定的,该过滤器识别需要“计数”的关键字