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
相关产品推荐
相关产品推荐

