【发布时间】:2017-06-16 00:17:56
【问题描述】:
您好,感谢您的帮助。
我在 excel 方面完全是个菜鸟,但由于我的研究需要,我一直在自学
我通过从 youtube 频道 ExcelVbaIsFun 改编它创建了这个基本代码
Sub ZipCodeSum2()
Dim dbsheet As Worksheet
Set dbsheet = ThisWorkbook.Sheets("Sheet1")
lr = dbsheet.Cells(Rows.Count, 1).End(xlUp).Row
SelRow = Selection.Row
'zip code
zip = dbsheet.Cells(SelRow, 2)
For i = 2 To lr 'change lr to 3 for testing purposes
Cells(i, 3).Select
For x = 2 To lr 'change lr to 10 for testing purposes
If dbsheet.Cells(x, 2) = zip Then
counter = counter + dbsheet.Cells(x, 1)
ActiveCell = counter
End If
Next x
Next i
End Sub
问题在于,对于第一个“i”,“外循环”运行良好,并且 sum 函数运行良好。但是,在下一个“i”中,它会添加第一个“i”和的结果,然后也将第二个“i”和添加到其中。因此,如果邮政编码相同,则基本上会导致第二个“i”是我想要的结果的两倍。
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
听起来您需要在找到匹配项后包含
Exit For或切换到application.match才能仅获得第一个匹配项。 -
SUMIF 或 SUMIFS 不是更好的解决方案是否有原因?
-
@YowE3K - 你了解我...一直在寻找简单的出路。
-
要回答您的具体问题,请在
For x = 2 To lr之前添加counter = 0,但这不会使您的代码正常工作 - 您将向 C 列中的每个单元格写入相同的值时刻,因为您在For i循环之外设置了zip。 (但有可能它会完全写入另一张工作表,因为您不限定Cells(i, 3)指的是哪个工作表。) -
@Jeeped 感谢您的建议!我将如何将其添加到代码中?同样对于 SUM 函数,我进行了调查,但找不到一个好的骨架来使用“计数器”来做我能做的事情。