在工作表中查找所有值的实例,然后求和偏移值
我有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)