我有wbk1.worksheet(1)
和wbk2.worksheet(1)
。
wbk1.worksheet(1)
在A列中有一个值列表
wbk2.worksheet(2)
具有相同的值列表,这些值可能会在A列中多次出现,并且offset(0,1)
单元格中包含数字值。
我需要做一个索引或匹配来查找wbk2中的所有值并将所有offset(0,1)
值相加。然后取出该总和并将其放入offset(0,1)
中的wbk1.worksheets(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
答案 0 :(得分:2)
如果VBA不是必需条件,则简单的=SUMIF()
语句具有相同的效果。
该功能看起来像这样:
=SUMIF([Wbk2.xlsx]Sheet1!A2:A5,Table1[[#This Row],[ID]],[Wbk2.xlsx]Sheet1!B2:B5)
答案 1 :(得分:1)
有更有效的方法。您可以使用SUMIF
公式计算值,然后使用结果值重写公式。如果rngWbk1
与A
中wbk1.worksheets(1)
列中的值相对应,则可以使用以下代码:
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
调整为startCell = "A2"
并将With rngWbk1.Offset(0, 1)
更改为...... { {1}}