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

VBA实现Excel行对比:统计A列相同值写入L列,G列为空时跳过行

需求说明

需要对Excel表格做如下统计操作:

  • A列存储若干字符串,统计相同值的出现次数,填写到对应行的L列
  • 若当前行G列为空,直接跳过该行不做统计
  • 期望实现效果如下:
A           G    L
zu=host,out=fr    x     1
zu=host,out=fr    x     2
zu=host,out=de    x     1
zu=host,out=de    x     2
zu=host,out=en    x     1
zu=host,out=sw    x     1
zu=host,out=sw    x     2
zu=host,out=nw 
zu=host,out=tw    x     1 

原代码问题说明

你写的原有代码存在几个核心逻辑错误:

  • 循环内只要执行完判断就调用Exit For,导致仅处理第一行就直接退出整个循环
  • 没有添加G列是否为空的判断,不符合跳过G列空行的要求
  • 仅对比当前行和下一行的A列值,没有全局记录所有A列值的累计计数,相同值不连续时统计完全错误

修正后可直接运行的代码
Dim i As Integer
Dim ws As Worksheet
Dim countDict As Object
' 用字典存储每个A列值的累计计数,适配非连续相同值场景
Set countDict = CreateObject("Scripting.Dictionary")
Set ws = ActiveSheet

For i = 1 To 5000
    ' A列空就终止整个循环
    If IsEmpty(ws.Range("A" & i)) Then
        Exit For
    End If
    ' G列空直接跳过当前行
    If IsEmpty(ws.Range("G" & i)) Then
        ws.Range("L" & i).Value = ""
        GoTo continueLoop
    End If
    ' 处理计数逻辑
    Dim curVal As String
    curVal = ws.Range("A" & i).Value
    If countDict.Exists(curVal) Then
        countDict(curVal) = countDict(curVal) + 1
    Else
        countDict.Add curVal, 1
    End If
    ' 计数结果写入L列
    ws.Range("L" & i).Value = countDict(curVal)
continueLoop:
Next i
MsgBox ("Finished ")

逻辑说明
  • 无需提前排序A列,即使相同字符串不连续也能正确统计累计出现次数
  • 严格遵循G列空则跳过的规则,空G行的L列不会写入任何内容
  • 遍历到A列空行才终止,保证所有有效数据行都能被处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:54:03