2016-07-15 249 views
0

我正在尝试基于期间对行内的单元格进行求和。因此,例如在第四期我会选择一些细胞B2,C2,D2,E2和F2。我需要这个“如果这然后总结这个”功能运行所有行数据输入。由于我可以有超过200,000行,使用Excel公式不起作用。求和的输出将是O列中的相应单元格。下面是我的代码的缩写版本(我没有想到我需要发布所有12个时期)。使用VBA根据特定单元格的值在一行中添加特定单元格

当我运行代码时,我得到'范围'object'_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 

回答

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

+1

谢谢斯科特,这解决了我的问题。当我说它不适用于excel时,我应该更具体一些。我正在使用大约250,000行。有了这么多的数据,试图在每个相应的单元格中执行公式会冻结并崩溃excel。但你的修复效果很好! –

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 
1

谁需要一个鸡?

您要求和的范围在第i行从第2列开始到第2列+期间。我们可以像这样定义这个范围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 
+0

LOL在你的第一行! (顺便说一下,在计算LastRow时,“ActiveSheet”应该替换为“。”,因为表格(“Blah”)可能不再是活动工作表。) – YowE3K

+0

谢谢!我也把鸡留在宣言锅里。 – 2016-07-16 07:33:10

相关问题