我想知道如何对VBA中的值求和并将其放入单元格中。
我知道了
Dim client As Range, totalPrice As Range, dDate As Range
Dim cell As Range
Dim i As Integer, j As Integer, k As Integer, subT As Double
Set client = Range("A2:A32")
i = 1
j = 1
k = 1
subT = 0
For Each cell In client
If cell(i, 1) = "apple" Then
If cell(j, 3) >= 43191 And cell(j, 3) <= 43220 Then
subT = subT + cell(k, 5)
End If
End If
i = i + 1
j = j + 1
k = k + 1
Next
Cells(10, 10).Value = subT
End Sub
该表有5列(第1列是水果名称,第3列是日期,第5列是价格),共有32行。
我正在尝试获取“苹果”的2018年4月价格。 4月有两个苹果,但是subT变量仅存储第一个(它跳过了第32行的价格值)。
第1行是标题。
第26行的苹果价格为42.09(存储并打印)。
第31行的苹果价格为14.65(它不会存储该价格,也不会将其添加到subT)。
答案 0 :(得分:0)
在原始代码中,您正在遍历范围,但也使用了范围对象的offset方法。
首先,“单元格”在Excel VBA中作为变量名引起了可怕的混乱。
说:
cell(x,y)是偏移量方法。这意味着让我知道单元格引用的范围是x-1行向下和y-1列正确的范围。
for每个循环都会自动更新变量单元格引用的范围,依次从A2遍历到A32。而且您的i,j,k变量正在指示程序检查与您的表格越来越偏离的范围。
例如,在第一遍中,单元格引用A2和单元格(i,1)引用A2。在第二遍中,单元格引用A3(对于每个更新的单元格)和单元格(i,1)引用A4(i = 2,并且偏移量方法表示,范围偏移量是从A3向下一行)。在第三遍中,单元格引用A4和单元格(i = 3,1)引用A6! (因为A6比A4偏移3-1 = 2行),依此类推。
我不清楚为什么将i,j,k初始化为2可以使事情正常工作。我怀疑那是个意外。 Cells方法始终会偏离A1(我相信),因此我认为这没有任何帮助。
我的建议是完全摆脱i,j和k:
If cell(1, 1) = "apple" Then
If cell(1, 3) >= 43191 And cell(1, 3) <= 43220 Then
subT = subT + cell(1, 5)
他们没有帮你任何忙。
我希望这会有所帮助。