2017-05-03 3 views
1

Ich frage mich, ob es einen schnelleren Weg gibt, eine Anzahl von Formeln in einen größeren Bereich hinzuzufügen (und zu berechnen).Schnellere Methode zum Hinzufügen von Summenformeln zu einem großen Bereich

Also der Bereich zählt 22 Spalten mit je 14235 Zeilen. Jede Spalte hat ihre eigene Formel, die meisten davon sind Summen mit 5 Kriterien.

Mein Ansatz ist eigentlich sehr einfach, aber wahrscheinlich nicht der schnellste. Wählen Sie einfach den Bereich jeder Spalte und fügen Sie die Formel ein.

Sheet1.Range("G4:G14238").FormulaR1C1 = "=SUMIFS(sumRangeA,criteria_range1,RC[-6],criteria_range2,RC[-5],criteria_range3,RC[-4],criteria_range4,RC[-3],criteria_range5,RC[-2])" 
Sheet1.Range("H4:H14238").FormulaR1C1 = "=SUMIFS(sumRangeB,criteria_range1,RC[-7],criteria_range2,RC[-6],criteria_range3,RC[-5],criteria_range4,RC[-4],criteria_range5,RC[-3])" 
...and so on 

Das dauert tatsächlich eine Weile, ich glaube, weil Excel fügt und berechnet alles nach dem Einfügen.

Also habe ich versucht, die automatische Berechnung vor dem Einfügen der Formeln zu deaktivieren und Excel alles berechnen lassen, sobald alle Formeln gefüllt waren, aber das dauerte sogar länger (fast doppelt so lang). Nicht sicher, ob ich den Code nicht korrekt verwendet, obwohl

Application.Calculation = xlCalculateManual 

Sheet1.Range("G4:G14238").FormulaR1C1 = "=SUMIFS(sumRangeA,criteria_range1,RC[-6],criteria_range2,RC[-5],criteria_range3,RC[-4],criteria_range4,RC[-3],criteria_range5,RC[-2])" 
Sheet1.Range("H4:H14238").FormulaR1C1 = "=SUMIFS(sumRangeB,criteria_range1,RC[-7],criteria_range2,RC[-6],criteria_range3,RC[-5],criteria_range4,RC[-4],criteria_range5,RC[-3])" 

Application.Calculation = xlAutomatic 

Ihnen ein besseres Verständnis zu geben, was ich versuche zu erreichen: Bis jetzt habe ich diese Formeln in einer regulären Excel-Tabelle (kein vba überhaupt). Es funktioniert, aber sehr langsam. Wenn ich nach einer Bedingung filme, dauert es bis zu zwei Minuten, bis die Ergebnisse angezeigt werden. Da ich diesen Tisch täglich benutze, ist er sehr zeitaufwendig und ziemlich ineffizient.

Also dachte ich, etwas mit vba zu erstellen könnte helfen, es schneller zu machen. Meine Idee war, die Formeln einzufügen, lassen Sie es berechnen und dann alles als Werte einfügen. Das sollte mir erlauben, schneller mit der Datei zu arbeiten. Aber da meine Vorgehensweise sehr viel Zeit in Anspruch nimmt, ist sie bis jetzt nicht die perfekte Lösung.

Können Sie mir dabei helfen? Ich bin mit jedem anderen Ansatz zufrieden, der den Arbeitsablauf beschleunigen könnte!

Vielen Dank im Voraus!

Best,

Ramon

+1

Sie könnten Ihr zweites Stück Code verwenden, um die Formeln in dann verwenden 'Sheet1.Calculate' hinzuzufügen Stellen Sie sicher, dass die Formeln berechnet werden. Dann könnten Sie die Formeln durch ihre Werte ersetzen, z. 'Sheet1.Range (" A4: Z14238 "). Wert = Sheet1.Range (" A4: Z14238 "). Wert" Dies bedeutet, dass bei jeder Filterung der Ergebnisse keine Formeln berechnet werden. – Jordan

+0

Was @ Jordan angeboten hat, ist korrekt . Aber es kann in Excel selbst anstelle von VBA (PasteSpecial) erfolgen. – Masoud

+0

@Jordan wird das ausprobieren und sehen, ob es schneller geht, danke! bei Masoud Das Problem ist, dass ich die Formeln jeden Tag brauche. Die Tabelle berechnet tägliche Aktualisierungswerte. – Ramon

Antwort

0

Eine nette einfache Schleife würde es tun:

Sub SumIf() 
Dim ASCII As Long 
Dim iRef As Long 
Application.Calculation = xlCalculationManual 

iRef = 6 
For ASCII = 71 To 93 
    Sheet1.Range(Chr(ASCII) & "4:" & Chr(ASCII) & "14238").FormulaR1C1 = "=SUMIFS(sumRange,criteria_range1,RC[-" & iRef & "],criteria_range2,RC[-" & (iRef - 1) & "],criteria_range3,RC[-" & (iRef - 2) & "],criteria_range4,RC[-" & (iRef - 3) & "],criteria_range5,RC[-" & (iRef - 4) & "])" 
    iRef = iRef + 1 
Loop 

Application.Calculation = xlAutomatic 

End Sub 
+0

Dank dieses Ansatzes funktioniert das leider nicht, da sich der SumRange für jede Spalte unterscheidet. – Ramon

Verwandte Themen