在工作表中查找所有值实例并对偏移值求和

时间:2014-01-27 14:55:26

标签: excel vba

我有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

2 个答案:

答案 0 :(得分:2)

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

该功能看起来像这样:

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

答案 1 :(得分:1)

有更有效的方法。您可以使用SUMIF公式计算值,然后使用结果值重写公式。如果rngWbk1Awbk1.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

如果rngWbk1A列中的值不对应,则需要将示例中的startCell调整为startCell = "A2"并将With rngWbk1.Offset(0, 1)更改为...... { {1}}