循环获取特定项的值,然后将找到的所有值相加

循环获取特定项的值,然后将找到的所有值相加

我需要一些帮助来为我的以下问题创建一个循环。

我在 K 列中有一个项目列表,它们的值在 L 列中。

我想要做的是:

对于 K 列中包含“Item1”的每个单元格,获取其值并将找到的所有值相加。

我试图实现这一点,而不必粘贴第 N 列中找到的每个值,然后将它们相加。

下面是我的代码。

Sub Test()

    Dim rng As Range, cell As Range

    Set rng = Range("K1:K10")

    For Each cell In rng
        cell.Activate
        Val1 = cell.Value
        If Val1 = "Item1" Then
            Val2 = ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Value
            If Sheets("Sheet1").Range("N1") = "" Then
                Sheets("Sheet1").Range("N1") = Val2
            Else
                Sheets("Sheet1").Range("N33").End(xlUp).Offset(1) = Val2
            End If
        Else
        End If
    Next cell

    Range("N11").Activate
    ActiveCell.FormulaR1C1 = "=SUM(R[-10]C:R[-1]C)"

End sub

答案1

编辑:

我误解了这个问题。以下是修改后的代码,用于纯粹在 VBA 中计算总和,而无需将各个值写入工作表:

Sub Test()

    Dim rng As Range, cell As Range
    Dim Val1 As Variant
    Dim Sum As Double: Sum = 0

    Set rng = Range("K1:K10")

    For Each cell In rng
        Val1 = cell.Value
        If Val1 = "Item1" Then
            Sum = Sum + cell.Offset(rowOffset:=0, columnOffset:=1).Value
        End If
    Next cell

    Range("N11").Value2 = Sum

End Sub

来自原始答案:

关于 VBA 编程,你需要学习的一个非常重要的黄金法则是切勿使用 Activate 和 ActiveCell

我已经重构了你的代码来展示如何做到这一点(并演示了更多技巧):

Sub Test()

    Dim cell As Range
    For Each cell In Range("K1:K10")
        Dim Val1 As Variant
        Val1 = cell.Value2
        If Val1 = "Item1" Then
            Dim Val2 As Variant
            Val2 = cell.Offset(rowOffset:=0, columnOffset:=1).Value2
            If Sheets("Sheet1").Range("N1") = "" Then
                Sheets("Sheet1").Range("N1") = Val2
            Else
                Sheets("Sheet1").Range("N33").End(xlUp).Offset(1) = Val2
            End If
        End If
    Next cell

    Range("N11").FormulaR1C1 = "=SUM(R[-10]C:R[-1]C)"

End Sub

所以这一行:

Val2 = ActiveCell.Offset(rowOffset:=0, ColumnOffset:=1).Value

更改至:

Val2 = cell.Offset(rowOffset:=0, ColumnOffset:=1).Value

或者更好的是:

Val2 = cell.Offset(ColumnOffset:=1).Value2

相关内容