Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Formel beschleunigen

Forumthread: Formel beschleunigen

Formel beschleunigen
05.12.2025 15:02:32
Christian
https://www.herber.de/bbs/user/179774.xlsm

Hallo,

kurze und einfache Frage. Wie kann ich die Formel in Spalte B in Hinsicht auf 92569 Zeilen in der Originaldatei beschleunigen?
Die Leerzellen in Spalte A sind Absicht und können nicht entfernt werden.
Ich suche eine Lösung, die sich, wie die jetzige Formel auch, bei jeder Eingabe eines Datums in Spalte A automatisch neu berechnet.

Danke
Christian
Anzeige

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel beschleunigen
05.12.2025 15:20:28
BoskoBiati
Hi,

zuallerst würde ich die Formel auf 365 umschreiben:

=WENN(A:.A>"";AUFRUNDEN(RANG.GLEICH(A:.A;A:.A;0)/ANZAHL2(A:.A);2);"")


Dann wäre zu prüfen, ob tatsächlich diese Formel die Datei verlangsamt.

Gruß

Edgar
AW: Formel beschleunigen
05.12.2025 15:34:50
Christian
Hallo Edgar,

danke für deine Antwort.
Mir ist diese Schreibweise vollkommen neu und daher hab ich da wohl irgendwas falsch gemacht, bei mir steht fast überall #ÜBERLAUF!

Schaust du bitte mal?

https://www.herber.de/bbs/user/179775.xlsm

Zu deinem anderen Einwand, es ist die einzige Formel in der Mappe.
Das diese Formel, so wie ich sie nutze nicht wahnsinnig viel Zeit in Anspruch nimmt, ist mir bewusst. Aber ich habe vor, ca. 42000 weitere Daten in Spalte A einzutragen, selbst wenn sich durch eine schnellere Formel nur 1/10 Sekunde pro Datum rausholen lässt, sind das bei 42000 Daten über eine Stunde insgesamt.

Das war mein Hintergedanke.

Gruß
Christian
Anzeige
AW: Formel beschleunigen
05.12.2025 15:38:41
Onur
Die Formel gehört NUR in B1 - Alle anderen (B2:B....) löschen !
AW: Formel beschleunigen
05.12.2025 15:48:18
Christian
Hallo Onur,

danke für den Hinweis.
Wie ich bereits sagte, war mir diese Syntax, um einen Bereich festzulegen, vollkommen neu.

Gruß
Christian
Anzeige
AW: Formel beschleunigen
05.12.2025 15:53:43
Alwin Weisangler
Hallo Christian,

schneller wirds wohl nur via VBA und Array zu machen sein:


Sub start()
Call Auswerten(Tabelle1.Range("A1:A92569"))
End Sub

Private Sub Auswerten(BereichA As Range)
Dim arrA(), arrOut(), i&, j&, k&, dict As Object, rankArr()
arrA = BereichA.Value
j = BereichA.Rows.Count
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To j
If arrA(i, 1) > "" Then
dict(arrA(i, 1)) = dict(arrA(i, 1)) + 1
End If
Next i
k = BereichA.Count - WorksheetFunction.CountBlank(BereichA)
ReDim arrOut(1 To j, 1 To 1)
For i = 1 To j
If arrA(i, 1) > "" Then
Dim r As Double
r = WorksheetFunction.Rank_Eq(arrA(i, 1), BereichA, 0)
arrOut(i, 1) = WorksheetFunction.Round(r / k, 2)
Else
arrOut(i, 1) = ""
End If
Next i
Tabelle1.Cells(1, 3).Resize(UBound(arrOut), 1) = arrOut
End Sub

ist ca. 10x schneller unterwegs.

Gruß Uwe
Anzeige
AW: Formel beschleunigen
05.12.2025 15:57:16
Christian
Hallo Uwe,

vielen Dank.
da sehe ich jetzt erstmal keinen Widerspruch zu meiner Bitte, dass es sich automatisch aktualisiert.
Das lässt sich ja bestimmt auch als UDF machen, oder als Worksheet Change.

Ich denke das mit dem W.C. bekomme ich sogar selber hin, werde ich direkt mal testen.

Gruß
Christian
Anzeige
AW: Formel beschleunigen
05.12.2025 17:38:45
Alwin Weisangler
Hallo Miteinander,

diese Arrayformel sollte ungefähr 5x schneller sein als die Ursprungsformeln:

=LET(xA;A1:A92569;xB;SEQUENZ(ZEILEN(xA));MAP(xB;LAMBDA(z;WENN(INDEX(xA;z;)>"";AUFRUNDEN(RANG.GLEICH(INDEX(xA;z;);xA;0)/ANZAHL2(xA);2);""))))

Falls das schon ausreichend schnell ist, kann man noch eine Lambda fürden Namensmanager bauen:
Name: Ausrechnen
Formel:

=LAMBDA(Bereich;LET(xA;Bereich;xB;SEQUENZ(ZEILEN(xA));MAP(xB;LAMBDA(z;WENN(INDEX(xA;z;)>"";AUFRUNDEN(RANG.GLEICH(INDEX(xA;z;);xA;0)/ANZAHL2(xA);2);"")))))

In Zelle B2:
=Ausrechnen(A1:A92569)


Gruß Uwe
Anzeige
AW: Formel beschleunigen
06.12.2025 19:59:00
Christian
Hallo Uwe,

die "normale" Formel ist wirklich eine schnelle Alternative,
vielen Dank.

Mit dem Namensmanager muss ich mal schaun, ewig nicht mehr genutzt.

Danke
Christian
Nachtrag
06.12.2025 20:00:54
Christian
Das mit dem Namensmanager klappt auch einwandfrei. Danke
AW: Formel beschleunigen
05.12.2025 16:21:00
Christian
Hallo Uwe,

hat zwar etwas gedauert bis ich auf die Idee kam, dass es daran lag dass die Events ausgeschaltet waren, dass es nicht funktioniert.
Aber jetzt hab ichs am Laufen und es funktioniert als Worksheet Change

Vielen Dank
Christian
Anzeige
AW: Formel beschleunigen
05.12.2025 15:31:01
daniel
Hi
probiere es mal so:

1. erstelle dir in einer Hilfsspalte (bspw Spalte F) eine Sortierte Liste der Datumswerte, verwende dieser Formel in F1:
=SORTIEREN(A.:.A;;-1)


2. ersetze dann die RANG-Funktion durch dieses: VERGLEICH(A1;F:F;-1)

also als ganzes in B1 und folgende
=WENN(A1>"";AUFRUNDEN(VERGLEICH(A1;F:F;-1)/ANZAHL2(A$1:A$92569);2);"")


in deinen vielen Zellen hast du dann statt dem langsamen RANG die schnellere Funktion VERGLEICH, die hier schneller sein kann, da sie auf eine Sortierte Liste zugreifen kann.

die Hilfsspalte beschleunigt dann das ganze, weil diese bei einer Änderung nur einmalig neu erstellt werden muss und nicht in jeder einzelnen deiner vielen Formeln erneut.

Gruß Daniel

Anzeige
AW: Formel beschleunigen
05.12.2025 15:39:11
Christian
Hallo Daniel,

danke erstmal.

Das funktioniert zwar, ist aber bei der noch im Moment eher geringen Anzahl an Daten in der Tabelle (die anderen kommen erst noch), deutlich langsamer als meine Formel.
Ändert sich das denn wenn es mehr Daten werden?

Danke
Christian
AW: Formel beschleunigen
05.12.2025 16:02:36
Christian
Hallo Daniel,

hat leider nicht viel gebracht, deine Version braucht bei mir, geschätzt 2-3 Sekunden, während meine just in Time war (getestet mit 463 Daten).

Gruß
Christian
Anzeige
AW: Formel beschleunigen
05.12.2025 15:52:03
daniel
weiß ich nicht, müsstest du testen.
wie ermittelst du die geschwindigkeit?
ist da noch was anderes am rechnen?

ggf probiers doch mal mit interner Berechnung und dieser Formel in B1.
diese muss dann auch nicht nach unten gezogen werden, sondern passt sich automatisch an die Befüllung in Spalte A an:
bei dieser Variante dürfen auch Texte wie überschriften zwischendrin vorkommen.
=LET(

a;A1:.A999999;
b;SORTIEREN(FILTER(a;ISTZAHL(a));;-1);
c;ANZAHL(a);
WENN(ISTZAHL(a);AUFRUNDEN(VERGLEICH(a;b;-1)/c;2);""))


Gruß Daniel
Anzeige
AW: Formel beschleunigen
05.12.2025 15:58:51
Christian
Hallo Daniel,

naja auf die Uhr schauen und Sekunden zählen, bis es berechnet ist.
Aber muss zu meiner Schande gestehen, dass beim Test noch eine andere Mappe mit Formeln offen war, muss es nochmal testen. Melde mich gleich.

Gruß
Christian
Gestatte mir eine Nachfrage
05.12.2025 15:37:15
RPP63
Moin!
Was willst Du da eigentlich berechnen?
Das älteste Datum entspricht 1 bzw. etwas weniger bei Dubletten, das jüngste nähert sich je nach Anzahl der 0
Es gibt aber keine lineare Beziehung zwischen Alter und Wert.
?

Gruß Ralf
Anzeige
Wenn es nur um die...
06.12.2025 13:28:08
Case
Moin Christian, :-)

Neugier geht, dann kannst du auch "Evaluieren". ;-)

Also keine Formel im Tabellenblatt - könnte bei sehr großen Tabellen von Vorteil sein. ;-)

Da du ja sowieso schon mit VBA arbeitest, kannst du es über das Worksheet_Change auch so machen: ;-)

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then Target.Offset(, 1).Value = Application.Evaluate("IF(A" & Target.Row & ">"""",ROUNDUP(RANK.EQ(A" & Target.Row & ",A$1:A$200000,0)/COUNTA(A$1:A$200000),2),"""")")
End Sub


Das ist die "Schmalspurvariante". ;-)

Wenn du nun aber 200 Daten in Spalte A reinkopieren willst und ein mehrfaches Aufrufen von Worksheet_Change verhindern möchtest, dann nimm das: ;-)

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim varArr As Variant
Dim strTMP As String
On Error GoTo Fin
If Target.Column = 1 Then
Application.EnableEvents = False
strTMP = "IF(" & Intersect(Target, Me.Columns(1)).Address(0, 0) & ">""""," & "ROUNDUP(RANK.EQ(" & Intersect(Target, Me.Columns(1)).Address(0, 0) & ",A$1:A$200000,0)/COUNTA(A$1:A$200000),2),"""")"
varArr = Application.Evaluate(strTMP)
Intersect(Target, Me.Columns(1)).Offset(0, 1).Value = varArr
End If
Fin:
Application.EnableEvents = True
End Sub


Das "Evaluate" wird direkt als Array geladen und auf einen Rutsch ausgegeben. ;-)

Habe dir meine Beispieldatei angehangen (kaum getestet und die Formeln in Spalte B habe ich schon als Werte drin - also Spalte B markieren, STRG+C und dann Einfügen - Werte): ;-)
https://www.herber.de/bbs/user/179781.xlsb

Man könnte auch noch gleich als Prozent formatieren, oder, oder, oder... ;-)

Servus
Case
Anzeige
AW: Wenn es nur um die...
06.12.2025 19:57:38
Christian
Hallo Case,

vielen Dank.
Wenn ich das richtig verstehe, sorry falls nicht, berechnet das doch immer nur die Zeile, in der ich etwas eingegeben habe. Aber wenn ich ein neues Datum eingebe, ändern sich doch auch der Rang aller anderen Zahlen und somit auch alle Prozentzahlen, auch wenn das durch das Aufrunden sich nicht immer auf die angezeigte Zahl auswirkt.

Oder sehe ich das falsch?

Christian
Anzeige
Da hätte ich...
06.12.2025 21:10:10
Case
Moin Christian, :-)

... das Wort Neugier fett machen sollen. Mir ging es nur um deine Aussage - damit du weißt wohin die Reise geht. ;-)

Servus
Case
AW: Da hätte ich...
06.12.2025 21:26:41
Christian
Hallo Case,

hatte dich schon verstanden. Ich hätte mich auch deutlicher ausdrücken können, dass es zwar hauptsächlich um das gerade eingefügte Datum geht bei der Neugierde, ich aber schon hin und wieder auch mal schaue, wo liegt z.b. die Datumsgrenze zwischen 10 und 11% und ähnliches oder mache mir hin und wieder auch mal eine Auflistung der ältesten 10% der Personen aus Neugierde (ich weiß die Namen hab ich für die Bsp Datei rausgenommen, daher auch die Lücken, bei den Lücken sind die Geburtstage schlichtweg unbekannt).

Aber unterm Strich, ich habe mich entschieden die VBA Version, die ich zu einem Worksheet Change gemacht habe, zu nutzen, vor allem deshalb weil ich mir durch die Nutzung von Arrays eine deutliche Geschwindigkeitssteigerung erhoffe, als auch das ich durch meine eigenen VBA Kenntnisse in der Lage war auch noch weitere Ideen, die ich noch hatte, dort einzubauen.

Gruß
Christian
Anzeige
Wenn du immer alle...
06.12.2025 22:35:03
Case
Moin Christian, :-)

... ca. 100.000 Zeilen durchgehen willst, würde ich mir überlegen sowas wie QuickSort einzusetzen (reicht bei der Zeilenanzahl noch - gibt aber auch schnellere Versionen). ;-)

Das dürfte bei der Anzahl in etwa 1 Sekunde durch sein. ;-)

Servus
Case
Anzeige
Das habe ich...
07.12.2025 13:11:27
Case
Moin Christian, :-)

... so gemeint: ;-)
https://www.herber.de/bbs/user/179782.zip

Ist gezippt, da mit 99.512 Zeilen zu groß. ;-)

Werte sind noch nicht drin. Einfach in Spalte A irgendwo Doppelklick und dann Return. ;-)

Dauert auf meiner "Möhre" keine Sekunde. ;-)

Wie gesagt - es gibt noch schnellere Möglichkeiten für "QuickSort". Aber die sollte reichen. ;-)

Servus
Case
Anzeige
AW: Gestatte mir eine Nachfrage
05.12.2025 15:46:35
Christian
Hallo Ralf,
wie soll ich das beschreiben, so dass es nachvollziehbar ist.
das soll einfach nur sagen, bei den jüngsten 1% der Daten soll 1% stehen, bei den ältesten 1% 100% und halt alles Prozentual dazwischen.
Hat was damit zu tun, dass ich bei der Weiterverarbeitung der Daten später z.b. mit den jüngsten 10% andere Dinge vorhabe als mit den ältesten 10%.

Gruß
Christian


Anzeige
AW: Gestatte mir eine Nachfrage
05.12.2025 16:35:01
Yal
Hallo Christian,

dann baue 2 PivotTables, bei den Du in einer den Top 10% aufsteigend und in der anderen Du den Top 10% absteigend auswertest.

Weil fraglich ist, warum diese Auswertungsaufgabe eine "Realtime"-Berechnung der Formeln benötigt (Zitat: bei jeder Eingabe eines Datums")?
Teueres, aber nicht zwingend erforderliche Anforderungen sollten vermieden werden.

VG
Yal
Anzeige
AW: Gestatte mir eine Nachfrage
05.12.2025 17:01:10
Christian
Hallo Yal,

schlicht und einfach Neugierde, schon bei der Eingabe zu wissen, wo bei diesem Datum der Hase hinläuft.
Hast natürlich recht, abgesehen von der Neugierde gibt es keinen zwingenden Grund für die Formel.

Mit Pivot habe ich noch nie gearbeitet.

Gruß
Christian
Anzeige
Top 10
05.12.2025 16:39:57
RPP63
Für so etwas hat Excel "eigentlich" den Top10-Filter vorgesehen …

- Lösche Spalte B
- Strg+Ende, A352, Umschalt+Pos1
- Strg+t
- B2: =WENNFEHLER(MAX([Datum])/[@Datum];"")
- Doppelklick auf Ausfüllkästchen
- Markierung als Standard formatieren

Jetzt hast Du ein Tabellenobjekt.
In diesem kannst Du Spalte B nach Top10 filtern (unterste / oberste 10%)
Anzeige
AW: Top 10
05.12.2025 17:02:33
Christian
Hallo Ralf,

bei der Weiterverabeitung nachher gebe ich dir vollkommen recht, da werde ich das auch nutzen.
Die Formel jetzt bereits erfüllt eher den Zweck der Neugierde, wo der Hase bei diesem Datum dann später mal hinläuft.

Gruß
Christian
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18