在工作表中查找所有值的实例,然后求和偏移值

我有wbk1.worksheet(1)wbk2.worksheet(1)

wbk1.worksheet(1)有列A中的值列表

wbk2.worksheet(2)具有在列A中可能出现多次的offset(0,1)单元格中的数值相同的值列表。

我需要做一个索引或匹配findwbk2中的所有值,并总和所有的offset(0,1)值。 然后把这个总和放在wbk1.worksheets(1)offset(0,1)单元格中。

 Example: Workbook 1, sheet 1 Column A Column B value 1 value 2 value 3 Workbook 2, sheet 1 Column A Column B value 1 15 value 2 2 value 1 3 value 1 12 End Result: Workbook 1, sheet 1 Column A Column B value 1 30 value 2 2 value 3 0 I've tried doing a for each loop, but I'm still a noob to vb, so clearly not doing something right: For Each x In rngWbk1 Set cellrngwbk2 = wbk2.Worksheets(1).Cells.Find(What:=x, LookIn:=xlValues) If Not cellrngwbk2 Is Nothing Then For Each y In rngwbk1 If y = cellrngwbk2 Then total = total + cellrngwbk2.Offset(0, 1).Value Else End If Next y x.Offset(0, 1).Value = total total = 0 'resets total value for next x value Else End If next x 

有更有效的方法。 您可以使用SUMIF公式来计算值,然后用结果值重写公式。 如果rngWbk1对应于wbk1.worksheets(1)中列A中的值,则可以使用以下代码:

  Dim frm As String Dim startCell As String startCell = Replace(rngWbk1.Cells(1, 1).Offset(0, -1).Address, "$", "") frm = "=SUMIF('[" & wbk2.Name & "]" & wbk2.Worksheets(1).Name & "'!A:A," & startCell & ", '[" & wbk2.Name & "]" & wbk2.Worksheets(1).Name & "'!B:B)" With rngWbk1.Offset(0, 1) .Formula = frm .Calculate .Value = .Value End With 

如果rngWbk1不对应列A值,则需要在startCell = "A2"示例中调整startCell ,并With wbk1.Worksheets(1).Range("B1:B100")更改为With rngWbk1.Offset(0, 1) With wbk1.Worksheets(1).Range("B1:B100")

如果VBA不是=SUMIF() ,则简单=SUMIF()语句具有相同的效果。

该函数看起来像这样:

 =SUMIF([Wbk2.xlsx]Sheet1!A2:A5,Table1[[#This Row],[ID]],[Wbk2.xlsx]Sheet1!B2:B5)