2016-07-15 254 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

相關問題