You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel VBA:如何按条件统计A列不同值对应的B列值出现次数

按Excel A列唯一值统计B列满足指定条件的出现次数(支持多条件&跨工作表)

请问能否协助解决以下技术问题?如何针对Excel表格A列中的每个不同值,统计B列中满足指定条件(例如">30")的值的出现次数?理想情况下希望支持多条件统计。数据源存储在A:B列,预期统计结果输出至E:F列,且数据源与结果区域可分属不同工作表。

初始尝试代码(仅支持提取唯一值并统计整体出现次数)

我一开始找到的代码只能将一个工作表中的唯一值提取至另一个工作表,并统计其在整个区域内的出现次数,无法实现条件筛选统计:

Sub UniqueIdentifiers()
    Dim lastRow As Long
    Dim count As Integer, i As Integer, j As Integer
    lastRow = Sheets(1).Range("E" & Rows.count).End(xlUp).Row
    i = 2
    j = 2
    Do Until i > lastRow
        count = Application.WorksheetFunction.CountIf(Sheets(1).Range("C2:C" & lastRow), Sheets(1).Cells(i, 3))
        For Each c In Sheets(1).Range("C" & lastRow).Cells
            Sheets(2).Cells(j, 1) = Sheets(1).Cells(i, 3)
            Sheets(2).Cells(j, 2) = count
            j = j + 1
        Next
        i = i + 1
    Loop
    Sheets(2).Range("A:B").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub

问题解决:支持条件筛选的完整代码

后来参考了相关思路,添加If条件判断后完成了需求,完整代码如下:

Sub uniKue()
    Dim i As Long, N As Long, s As String, r As Range
    N = Cells(Rows.count, "A").End(xlUp).Row
    For i = 2 To N
        If Cells(i, 4) >= 30 Then
            Cells(i, 5) = Cells(i, 2) & " " & Cells(i, 5)
            Cells(i, 6) = Cells(i, 5)
        End If
    Next i
    Range("F:F").RemoveDuplicates Columns:=1, Header:=xlNo
    For Each r In Range("F:F").SpecialCells(2).Offset(, 1)
        r.Formula = "=COUNTIF(E:E," & r.Offset(, -1).Address & ")"
    Next r
End Sub

这段代码的核心逻辑是:

  • 遍历数据源,标记出满足指定条件(示例中为Cells(i, 4) >= 30)的记录
  • 提取标记后的唯一值到指定列
  • 通过COUNTIF函数统计每个唯一值对应的满足条件的出现次数

感谢各位的帮助!

内容的提问来源于stack exchange,提问作者DW DW

火山引擎 最新活动