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




