如何在VBA中总计值并将该值放入单元格

时间:2018-07-12 02:24:52

标签: excel vba

我想知道如何对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)。

1 个答案:

答案 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)

他们没有帮你任何忙。

我希望这会有所帮助。