You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA统计A列产品ID在P列出现次数并输出到C列的咨询

VBA统计产品ID对应客户出现次数实现方案

原有代码存在几个问题:

  • 循环对象错误:原代码遍历P列,实际需求是遍历A列的每一个产品ID,统计该ID在P列的出现次数
  • 行号获取逻辑错误:第一个表(A、B列)和第二个表(O、P列)行数可能不一致,不能共用同一个LastRow变量
  • 语法疏漏:Cell变量未声明,会触发编译错误
  • 缺失核心匹配统计逻辑

修正后可直接运行的完整代码如下:

Sub CountOccurrences()
    Dim ID As String
    Dim Result As Long
    ' Result存储对应ID在P列的出现次数
    Dim tablerng As Range
    ' 第二个表的P列数据范围
    Dim resultsrng As Range
    Dim LastRowA As Long ' 第一个表A列的最大有效行号
    Dim LastRowP As Long ' 第二个表P列的最大有效行号
    Dim Cell As Range
    
    ' 分别获取两列的最大有效行,避免两个表格行数不一致的问题
    LastRowA = Cells(Rows.Count, "A").End(xlUp).Row
    LastRowP = Cells(Rows.Count, "P").End(xlUp).Row
    ' 定义P列的统计范围
    Set tablerng = Range("P1:P" & LastRowP)
    ' 定义C列的结果输出范围
    Set resultsrng = Range("C1:C" & LastRowA)
    
    ' 遍历A列每一个产品ID
    For Each Cell In Range("A1:A" & LastRowA)
        ID = Cell.Value
        ' 调用表格函数CountIf统计ID出现次数,效率高于自行遍历判断
        Result = Application.WorksheetFunction.CountIf(tablerng, ID)
        ' 结果写入当前行对应的C列单元格
        Cells(Cell.Row, "C").Value = Result
    Next Cell
    
    ' 释放对象内存
    Set tablerng = Nothing
    Set resultsrng = Nothing
End Sub

如果你实际需要统计的是O列的产品ID和A列ID匹配后对应的客户数,仅需要把代码中Set tablerng = Range("P1:P" & LastRowP)修改为Set tablerng = Range("O1:O" & LastRowP)即可,两种统计逻辑按需选择。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:30:04