使用VBA连续添加特定单元格取决于特定单元格的值

时间:2016-07-15 19:10:45

标签: excel-vba vba excel

我正在尝试根据时间段对一行中的单元格求和。因此,例如在时段4中,我将一些单元格B2,C2,D2,E2和F2。我需要这个"如果这样那么总结这个"函数为所有输入数据的行运行。由于我可以拥有超过200,000行,因此使用excel公式并不起作用。求和的输出将是O列中的相应单元格。下面是我的代码的缩短版本(我没想到我需要发布所有12个句点)。

当我运行代码时,我得到了' Range'对象' _Global'失败,它突出显示我指定鸡的范围。此外,如果有人知道更清洁的方式,我会非常感激。

Sub AddRowsBySelectedPeriodMacro()
    Sheets("Blah").Select
    Dim LastRow As Long, i As Long, Period As Long, Chicken As Long
    LastRow = ActiveSheet.UsedRange.Rows.Count
    Period = Range("P2")

    For i = 2 To LastRow
        If Period = "1" Then
            Chicken = Cells(i, 2).Value + Cells(i, 3).Value

        ElseIf Period = "2" Then
            Chicken = Cells(i, 2).Value + Cells(i, 3).Value + Cells(i, 4).Value

        Else: Period = "12"
            Chicken = Cells(i, 2).Value + Cells(i, 3).Value + Cells(i, 4).Value + Cells(i, 5).Value + Cells(i, 6).Value + Cells(i, 7).Value + Cells(i, 8).Value + Cells(i, 9).Value + Cells(i, 10).Value + Cells(i, 11).Value + Cells(i, 12).Value + Cells(i, 13).Value + Cells(i, 14).Value

        End If

        Range("02:O").Value = Chicken

    Next i

End Sub

3 个答案:

答案 0 :(得分:1)

谁需要鸡肉?

您想要求和的范围是从第2列到第2列+期间的第i行。我们可以像Range.Cells(i, 2), Cells(i, 2 + Period))一样定义该范围,并将该范围与WorksheetFunction.Sum(Range(Cells(i, 2), Cells(i, 2 + Period)))相加。

Sub AddRowsBySelectedPeriodMacro()

    Dim LastRow As Long, i As Long, Period As Long
    With Sheets("Blah")
        LastRow = .UsedRange.Rows.Count
        Period = .Range("P2")

        For i = 2 To LastRow

            .Range("O" & i).Value = WorksheetFunction.Sum(.Range(.Cells(i, 2), .Cells(i, 2 + Period)))

        Next

    End With
End Sub

答案 1 :(得分:0)

使用excel公式的

不起作用

如果我正确地阅读了你的情景,是的。

如果P2包含句点,任何数字,1-12和公式: =SUM(OFFSET(B4,0,0,1,$P$2+1))在P4中,数据在B4:N4中,您将获得所需的结果。

然后,您可以向下拖动细胞。

要直接说出您的问题,需要编写代码Range("O2:O").Value = Chicken Range("O" & i).Value = Chicken

答案 2 :(得分:0)

您的代码的更简单版本将是:

Sub AddRowsBySelectedPeriodMacro()
Sheets("Blah").Select
  Dim LastRow As Long, i As Long, Period As Long, Chicken As Long
  Dim m As Integer
  LastRow = ActiveSheet.UsedRange.Rows.Count
  Period = Range("P2")

  For i = 2 To LastRow
      Chicken = 0
      For m = 1 to Period
          Chicken = Chicken + Cells(i, m + 1).Value
      Next m

      Range("O" & i).Value = Chicken

 Next i

End Sub