2016-07-15 5 views
0

Я пытаюсь суммировать ячейки в строке в зависимости от периода. Так, например, в период 4 я бы выделил ячейки B2, C2, D2, E2 и F2. Мне нужно, чтобы эта функция «if this then sum this» выполнялась для всех строк, в которые были введены данные. Поскольку у меня может быть более 200 000 строк, использование формулы excel не работает. Результатом суммирования будет соответствующая ячейка в столбце О. Ниже приведена сокращенная версия моего кода (я не считал, что мне нужно опубликовать все 12 периодов).Использование VBA для добавления определенных ячеек в строке в зависимости от значения конкретной ячейки

Когда я запускаю код, я получаю «Range» объекта «Global», и он выделяет, где я указывал диапазон для Chicken. Кроме того, если кто-то знает более чистый способ сделать это, я бы очень признателен.

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

используя формулу первенствовать не работает

Если я прочитал ваш сценарий правильно, да это делает.

Если P2 имеет период, любое число, 1-12, и формула: =SUM(OFFSET(B4,0,0,1,$P$2+1)) в P4, с данными в В4: N4, вы получите результаты, которые вы хотите.

Затем вы можете перетащить ячейки.

Говорить прямо на ваш вопрос, кусок кода Range("O2:O").Value = Chicken должен быть написан Range("O" & i).Value = Chicken

+1

Спасибо Скотту, что исправил мою проблему. Я должен был быть более конкретным, когда я сказал, что он не будет работать в Excel. Я работаю с 250 000 строк. С таким большим количеством данных попытка сделать формулу в каждой соответствующей ячейке замерзает и падает из-за превышения. Но ваше исправление отлично работает! –

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 на первой линии! (BTW - «ActiveSheet.» При вычислении LastRow следует заменить просто «.», Так как листы («Бла») больше не могут быть активным листом.) – YowE3K

+0

Спасибо человеку! Я также оставил курицу в банке декларации. –

Смежные вопросы