VBA嵌套Do Until Loop
我正在制作一张有17张工作表的电子表格,其中包含我感兴趣的发票数据的工作表2-16。
例如,如果表格(2)第4栏中的人名出现在表格(1)中,那么我想总结他们已经收取的金额(其在表格(2)的第10栏中find)。 电子表格2-16的布局完全相同,只是包含不同数量的条目,数据不同。
我有兴趣计算三笔钱,然后在每张表的顶部显示:两笔钱分别代表两个不同的分部,最后一笔是总计(w_sum,smb_sum和total)
我遇到的问题是,每张表都显示表格(2)中的总和,而不是他们自己的。 但是,当我删除外For循环并手动更改图纸编号,我得到正确的值。 我希望我的问题能够得到澄清,我将不胜感激任何帮助。 有一天我刚刚开始玩VBA,所以我对语法不太熟悉,但是我认为我的逻辑是正确的或者几乎是正确的。
Sub GetSums() Dim i As Integer Dim j As Integer Dim w_sum As Currency Dim smb_sum As Currency Dim total As Currency w_sum = 0 smb_sum = 0 total = 0 i = 15 For j = 2 To 17 Sheets(j).Activate Do Until Cells(i, 6).Value = 0 If Not IsError(Application.Match(Cells(i, 4).Value, Sheets(1).Range("D2:D91"), 0)) Then w_sum = w_sum + Cells(i, 10).Value End If If Not IsError(Application.Match(Cells(i, 4).Value, Sheets(1).Range("E2:E91"), 0)) Then smb_sum = smb_sum + Cells(i, 10).Value End If total = total + Cells(i, 10).Value i = i + 1 Loop Cells(10, 4).Value = w_sum Cells(11, 4).Value = smb_sum Cells(12, 4).Value = total Next j End Sub
您可以将variables声明为工作表:
Dim ws As Worksheet
然后,而不是调用Sheets(j).Activate
,您可以将ws
绑定到图纸编号j
:
Set ws = Sheets(j)
那么你可以使用ws.cell(i, 4).value
而不是只是cells(i, 4).value
,它往往performance任意。
希望这可以帮助