Ich versuche, ein Makro zu erstellen, das mehrere Summen berechnet und nach Bedingungen auf einem anderen Arbeitsblatt sucht. Dies ist der Code, den ich bisher habe:VBA - sumifs in for-Schleife - gibt es einen effizienteren Weg?
Sub SumPerYear()
Dim NoClients As Long
NoClients = Worksheets("Temp").Range("A2").End(xlDown).Row - 1
Sheets("Temp").Activate
For i = 2 To NoClients + 1
'Fill 2015 € in column E
Cells(i, 5).Value2 = Application.SumIfs(Worksheets("Q ALL").Range("I:I"), _
Worksheets("Q ALL").Range("A:A"), 2015, _
Worksheets("Q ALL").Range("D:D"), Worksheets("Temp").Range("A" & i).Value2, _
Worksheets("Q ALL").Range("C:C"), True)
'Fill 2015 # in column F
Cells(i, 6).Value2 = Application.CountIfs(_
Worksheets("Q ALL").Range("A:A"), 2015, _
Worksheets("Q ALL").Range("D:D"), Worksheets("Temp").Range("A" & i).Value2, _
Worksheets("Q ALL").Range("C:C"), True)
'Fill 2016 € in column G
Cells(i, 7).Value2 = Application.SumIfs(Worksheets("Q ALL").Range("I:I"), _
Worksheets("Q ALL").Range("A:A"), 2016, _
Worksheets("Q ALL").Range("D:D"), Worksheets("Temp").Range("A" & i).Value2, _
Worksheets("Q ALL").Range("C:C"), True)
'Fill 2016 # in column H
Cells(i, 8).Value2 = Application.CountIfs(_
Worksheets("Q ALL").Range("A:A"), 2016, _
Worksheets("Q ALL").Range("D:D"), Worksheets("Temp").Range("A" & i).Value2, _
Worksheets("Q ALL").Range("C:C"), True)
'Fill 2017 € in column I
Cells(i, 9).Value2 = Application.SumIfs(Worksheets("Q ALL").Range("I:I"), _
Worksheets("Q ALL").Range("A:A"), 2017, _
Worksheets("Q ALL").Range("D:D"), Worksheets("Temp").Range("A" & i).Value2, _
Worksheets("Q ALL").Range("C:C"), True)
'Fill 2017 # in column J
Cells(i, 10).Value2 = Application.CountIfs(_
Worksheets("Q ALL").Range("A:A"), 2017, _
Worksheets("Q ALL").Range("D:D"), Worksheets("Temp").Range("A" & i).Value2, _
Worksheets("Q ALL").Range("C:C"), True)
'Fill Tot € in column K
Cells(i, 11).Value2 = Cells(i, 5) + Cells(i, 7) + Cells(i, 9)
'Fill Tot # in column L
Cells(i, 12).Value2 = Cells(i, 6) + Cells(i, 8) + Cells(i, 10)
Next i
End Sub
Dieser Code funktioniert, sondern weil es Tausende von Datensätzen sind, dauert es eine lange Zeit in Anspruch. Gibt es eine Möglichkeit, dies effizienter/schneller zu machen?
Vielen Dank für Ihre Eingabe!
nicht die Loop-Funktion -seine der Zeit so viel nehmen verwenden – Ashok
So abzuschließen wie kann ich das anders machen, dann? Was würdest du vorschlagen? – Geert
Warum geben Sie die SUMMIF nicht direkt in row2 ein und kopieren sie dann einfach? –