VBA - SUMIFS - Увеличение строки - ошибка 1004

Я только что зарегистрировался на веб-сайте, и я уверен, что смогу получить некоторую помощь по этому вопросу (я не эксперт в VBA)..

Вкратце, я делаю макрос, который вычисляет общее количество (в столбце I для каждой строки) на основе 2 параметров (столбец A и столбец G). Я использую функцию SUMIFS, которая отлично работает для одной ячейки. Но я хотел бы автоматизировать это для каждого ряда, это становится сложным для меня..

Вот код, который работает для ячейки I2:

Sub quantity_aggregated()      
    Dim sht As Worksheet, LastRow As Long, i As Integer    
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row     
    Set sht = ThisWorkbook.Worksheets("JDE_Greece")     
    Range("I2").Formula = "=SUMIFS(H:H,G:G,G2,A:A,A2)"     

Я хочу сохранить это таким образом, но интегрировать For, начиная со строки 2 и заканчивая последней заполненной строкой.

Я думал (и пытался) о некоторых кодах ниже, 3 разных (конец один и тот же, увеличивая i и закрывая макрос):

For i = 2 To LastRow     

'Range("I2").Formula = "=SUMIFS(H:H,G:G,Range(i,7),A:A,Range(i,1)"''      

'Range(i, 9).Value = Application.WorksheetFunction.SumIfs(Range("H:H"), Range("G:G"), Range(i, 7), Range("A:A"), Range(i, 1))'   

'Cells(i, 9).FormulaR1C1 = "=SUMIFS(H:H,G:G, "'     

Next i      
End Sub  

Я понимаю этот процесс, но для каждого из них появляется "диапазон методов глобального сбоя объекта (ошибка 1004)". Я уверен, что это что-то вроде определения приложения, объекта или чего-то связанного, но не могу решить это.

У кого-нибудь есть какие-либо идеи? Это было бы действительно здорово:)

Заранее большое спасибо,

1 ответ

Решение

Вы можете просто применить формулу ко всему диапазону I, так как ваши ссылки на A2 а также G2 являются "относительными", формула будет систематически корректироваться для каждой строки в диапазоне.

Dim sht As Worksheet, LastRow As Long
Set sht = ThisWorkbook.Worksheets("JDE_Greece")     
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row     
sht.Range("I2:I" & LastRow).Formula = "=SUMIFS(H:H,G:G,G2,A:A,A2)"

Если вы хотите сделать это с циклом "для практики",

For i = 2 To LastRow
  sht.Range("I" & i).Formula = "=SUMIFS(H:H, G:G, G" & i & ", A:A, A" & i & ")"
Next i

но обратите внимание, что это именно то, что происходит за кулисами в первой форме.

Другие вопросы по тегам