Excel COUNT langsam, wenn das Datenblatt neu erstellt wird

Excel COUNT langsam, wenn das Datenblatt neu erstellt wird

Ich arbeite mit einem Excel-Add-In, das ein Datenblatt löscht und neu erstellt, wenn Sie es mit Daten aus einer Live-Datenbank aktualisieren, und zwar so, dass Verweise auf das Datenblatt nicht unterbrochen werden. Ich verwende die Formel COUNT('DataSheet'!A:A), um zu zählen, wie viele Datenzeilen abzüglich der Spaltenüberschrift vorhanden sind. Wenn die Daten nicht aktualisiert werden, wird fast sofort neu berechnet, aber wenn die Daten mithilfe des Add-Ins aktualisiert werden, erhöht sich die Anzahl langsam, bis die Formel mit der Berechnung fertig ist. Ich muss andere ähnliche Formeln verwenden, die die Arbeitsmappe erheblich verlangsamen.

Ich kann mir Workarounds vorstellen, aber ich muss wissen, was den Unterschied im Verhalten verursacht, wenn COUNT normal neu berechnet wird und wenn die Daten aktualisiert werden. Im Moment haben die Daten vor und nach der Aktualisierung die gleiche Anzahl von Zeilen und der formatierte Bereich ist nicht länger als die Daten.

Bearbeiten: Ich frage mich, ob dies etwas mit der Art und Weise zu tun hat, wie Excel damit umgeht, welche Zellen im Speicher aktiv/ausgefüllt sind?

Antwort1

Willkommen @TheGreatO96.

Versuchen Sie, COUNTA() statt COUNT() zu verwenden, aber ich bezweifle fast, dass das viel hilft. Ich vermute, Sie müssen in Ihrem Add-In einige Dinge optimieren. Eine Datenbankaktualisierung ist eine volatile Aktion und löst Neuberechnungen aus, die normalerweise ohne die Aktualisierung nicht ausgelöst werden. Wenn Sie volatile Funktionen wie OFFSET, INDIRECT, NOW oder sogarbedingte Formatierung, kommt es in einer großen Arbeitsmappe zu einem Stillstand. Die Tatsache, dass Sie den Wert von COUNT(...) update in einer einzelnen Zelle sehen können, könnte auf erhebliche Verzögerungen in Ihrem Makro hinweisen. Sie könnten versuchen, ein paar Dinge in Ihrem Code anzupassen:

  • Starten Sie Ihr Makro, indem Sie die Neuberechnung deaktivieren. Führen Sie den Rest des Codes aus. Schalten Sie die Neuberechnung wieder ein.

  • Starten Sie Ihr Makro, indem Sie Bildschirmaktualisierungen deaktivieren. Führen Sie den Rest des Codes aus. Schalten Sie Bildschirmaktualisierungen ein.

  • Starten Sie Ihr Makro mit dem Deaktivieren von Ereignissen. Führen Sie den Rest des Codes aus. Schalten Sie die Ereignisse wieder ein.

Ps. Ich habe meine Makroausführungsgeschwindigkeit einmal um fast zwei Größenordnungen erhöht, indem ich einfach die OFFSET-Funktionen zugunsten relativer benannter Bereiche entfernt habe.

verwandte Informationen