8.5k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)
Hallo,

ich habe in einem Excel-Sheet eine Formel, die u.a. folgende Zellzuweisung beinhaltet:

....ZEILE($1:$400)...
Gesamte Formel:
=VERKETTEN(WENN(ZEILEN(59:60)>ZÄHLENWENN(Veränderungen!$A:$A;$B59);"";INDEX(Veränderungen!$L:$L;KKLEINSTE(WENN(Veränderungen!$A$1:$A$400=$B59;ZEILE($1:$400));ZEILE(A$2))));" / ";WENN(ZEILEN(59:60)>ZÄHLENWENN(Veränderungen!$A:$A;$B59);"";INDEX(Veränderungen!$H:$H;KKLEINSTE(WENN(Veränderungen!$A$1:$A$400=$B59;ZEILE($1:$400));ZEILE(A$2))));" / ";WENN(ZEILEN(59:60)>ZÄHLENWENN(Veränderungen!$A:$A;$B59);"";INDEX(Veränderungen!$I:$I;KKLEINSTE(WENN(Veränderungen!$A$1:$A$400=$B59;ZEILE($1:$400));ZEILE(A$2)))))

Obwohl ich mit "$" verhindern möchte, dass sich die Formel verändert passiert dies wenn ich in der entsprechenden Tabelle Zeilen einfüge: aus zeile($1:$400) wird dann zeile($1:$402), wodurch die Formel dann einen Fehler erzeugt. Hat jemand einen Tipp wie ich das umgehen kann?
Danke und Gruß!
Andreas

31 Antworten

0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Rainer,

hier der link zur Testdatei:

http://www.file-upload.net/download-9293790/TestSupport.xlsm.html

Danke dir im Voraus für deine kompetente Hilfe!!!!!
Gruß Andreas
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

in Deiner Datei habe ich festgestellt, dass Du zum größten Teil mit überdimensionierten Formeln arbeitest.
Wobei meistens ganze Spalten referenziert sind und auch Matrixformeln verwendet werden, wo es nicht erforderlich ist.

Dieses führt immer zu erheblichem Geschwindigkeitsverlust beim Arbeiten in den Tabellen.

Um dem entgegen zu wirken, habe ich für die relevanten Bereiche Namen definiert, die diese Bereiche dynamisch machen.
Zeilen einfügen/löschen kann nun ohne Formeländerungen geschehen.

Die Namen lauten für:

Spalte Name
A_____Mitglied
D_____Datum2
H_____Betrag
I_____Betrag2
J_____Betrag3
K_____Betrag4
L_____Datum
Für den dynamische Zeilenbereich gilt der Name "Bereich"

In allen gelben Zellen habe ich die Formeln optimiert.
In den grünen Zellen habe ich die Formate geändert, um die Werte für die Formeln nutzbar zu machen.
Damit ist es möglich die Formeln sowohl horizontal als auch vertikal zu verschieben.

Schau mal rein und teste, ob ich evtl. was übersehen habe.

Download

Gruß
Rainer
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hall Rainer,
man du hast dir ja richtig Arbeit gemacht!!!Vielen Dank.!!!
Du hast natürlich Recht, was die Rechendauer betrifft, was wirklich nervig geworden ist. Ich habe bisher nicht mit Namen und Bereichen gearbeitet, muss mich da jetzt mal mit beschäftigen und im Detail sehen wie du das gemacht hast. Sieht in jedem Fall gut aus!
Danke und Gruß
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Rainer,

es ist alles richtig und funktioniert richtig gut - nur : ich bin an meine Grenzen gekommen und muss noch einen Excel-Kurs in dieser Thematik machen!! Ich kann da einfach noch nicht nachvollziehen wie du diese Bereiche so definiert hast, dass alles so funktioniert.
Danke und Gruß
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Rainer,

ich möchte gern verstehen was du gemacht hast und versuche das Stück für Stück nachzubauen.
Die ersten Fragen kommen mir aber schon bei der Definition der Bereichsnamen auf. Ich habe diese z.B. als einfache Spalten Veränderungen!$L:$L definiert, bei dir stehen da schon komplexe Ausdrücke/Formeln.
Gar nicht klar komme ich mit dem dynamischen Zellbereich - kannst du mir da noch eine kleine Erklärung nachliefern? Danke und Gruß!
Andreas
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

der Schlüssel des Erfolges ist hierbei die Tabellenfunktion =BEREICH:VERSCHIEBEN()

Schau sie Dir an und spiele damit, bis Du sie beherrschst und 100%-ig verstanden hast.
Das ist Deine Fleißarbeit, wobei ich nicht helfen kann und will.

Aus eigener Erfahrung kann ich sagen, dass hierbei nur Selbsterkenntnisse zählen die letztlich zum Aha-Erlebnis führen.
Fragen und Nachmachen ohne zu verstehen nützt hierbei nichts.

Ein Beispiel:

Schau mal in Deiner Datei, unter dem Namen "Datum", dort findest Du die Definitionsformel

=BEREICH.VERSCHIEBEN(Veränderungen!$A$1;;11;VERGLEICH(0;Veränderungen!$A:$A;-1);)

zum besseren Verständnis müsste sie so lauten:

=BEREICH.VERSCHIEBEN(Veränderungen!$A$1;0;11;VERGLEICH(0;Veränderungen!$A:$A;-1);0)

Argument 1: Veränderungen!$A$1
- Ausgangszelle der Aktion

Argument 2: 0
- Versatz von Ausgangszeile 1 nach unten = 0 Zeilen

Argument 3: 11
- Versatz von Ausgangsspalte A nach rechts = 11 Spalten (also Spalte L)

Argument 4: VERGLEICH(0;Veränderungen!$A:$A;-1)
- berechnet den letzten Zeilenindex der Spalte L, ausgehend von der Anzahl der Werte in Spalte A. Also immer dynamisch.

Argument 5: 0
- 0 deshalb weil nur eine eindimensionale Matrix (Spalte L) benötigt wird.
Stünde dort z:B. eine 4, wäre damit eine mehrdimensionale Matrix definiert, nämlich L1:Ox

Viel Spaß beim Verstehen
Nutze auch intensiv www.excelformeln.de/formeln.html?umenuzahl=5, kann ich nur empfehlen.

Gruß
Rainer
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Rainer,

das hilft mir doch schon sehr und das verstehe ich auch soweit. Nur mit deiner Definition von "Bereich" komme ich nicht klar, die weicht ja auch von den übrigen Namensdefinitionen ab.
Gruß Andreas
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo,

würde es bei deinem Beispiel nicht auch ausreichen, den Bereich als "Veränderungen!A:L" zu definieren? Ist mit Sicherheit etwas plump aber führt zumindest erst einmal zu keinem Fehler..????
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

in Deinen ursprünglichen Formeln stand u.a. ZEILE($1:$400), was letztlich ein statischer Bezug ist.
Unter den Namen "Bereich" verbirgt sich diese Formel und macht das Ganze dynamisch.

=INDIREKT("1:"&VERGLEICH(0;Veränderungen!$A:$A;-1))

würde es bei deinem Beispiel nicht auch ausreichen, den Bereich als "Veränderungen!A:L" zu definieren?


...nein.
Damit will ich ja keinen Tabellenbereich, sondern nur den dynamischen Zeilenbereich des jeweiligen INDEX definieren.
Siehe Argument 4 meines letzten Beitrages.

Gruß
Rainer
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
...ok, jetzt sehe ich langsam durch wie, warum und was du gemacht hast - nur selber wäre ich da sicher (noch) nicht draufgekommen.
Danke für deine Hilfe und Erklärungen!!!!!!
Schönen Abend! Andreas
...