在循环内循环中使用计数器= excel vba中的问题

嗨,感谢您的帮助。

我在Excel中总是noob,但我一直在教我自己,因为我的研究需要
我通过从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 

问题是,对于第一个“我”“外环”运行良好,和function运作良好。 然而,在下一个'我'它增加了第一个'我'总和的结果,然后加上第二个'我'的总和。 所以如果邮政编码是相同的,基本上导致第二个“我”是我想要的结果的两倍。

任何帮助,将不胜感激! 谢谢!

我的工作表样本

如果要在内部循环执行之前将counter复位,请在进入该循环之前对其进行初始化:

 Sub ZipCodeSum2() Dim dbsheet As Worksheet Dim lr As Long Dim SelRow As Long Dim zip As String Dim i As Long Dim counter As Currency Dim x As Long Set dbsheet = ThisWorkbook.Sheets("Sheet1") lr = dbsheet.Cells(dbsheet.Rows.Count, 1).End(xlUp).Row For i = 2 To lr 'change lr to 3 for testing purposes 'zip should be set inside the "For i" loop zip = dbsheet.Cells(i, "B").Value counter = 0 For x = 2 To lr 'change lr to 10 for testing purposes If dbsheet.Cells(x, "B").Value = zip Then counter = counter + dbsheet.Cells(x, "A").Value End If Next dbsheet.Cells(i, "C").Value = counter Next i End Sub 

但是这可以简化为:

 Sub ZipCodeSum2() With ThisWorkbook.Sheets("Sheet1") With .Range("C2:C" & .Cells(.Rows.Count, "A").End(xlUp).Row) .Formula = "=SUMIF(B:B,B2,A:A)" .Value = .Value End With End With End Sub 

或者你可以放置公式

 =SUMIF(B:B,B2,A:A) 

到Excel中的单元格C2并将其复制下来。

在C2试试中,

 =sumifs(a$2:a2, b$2:b2, b2) 

根据需要填写。

如果您只希望值的最后一个实例显示总和,

 =IF(COUNTIF(A$2:A2, A2)=COUNTIF(A:A, A2), SUMIFS(A$2:A2, B$2:B2, B2), TEXT(,))