Excel 2000: Einzelteile der Formel funktionieren, gesamte Formel nicht
Hallo zusammen!
Ich kann auf der Arbeit nur Excel 2000 nutzen und versuche folgende Formel zum Laufen zu bekommen:
=index(adresse(summe(zeile(index($G$1:$G$149; vergleich($A177; $G:$G; 0))); 1); 7):$G$149; vergleich("*"; $V:$V; 0))
Leider gibt mir Excel immer aus, die eingegebene Formel enthalte einen Fehler, spezifiziert diesen aber nicht weiter.
Besonders seltsam finde ich das, weil die Einzelteile der Formel problemlos funktionieren:
"=adresse(summe(zeile(index($G$1:$G$149; vergleich($A177; $G:$G; 0))); 1); 7)" gibt das korrekte Ergebnis "$G$7" aus.
"=index($G$7:$G$149; vergleich("*"; $V:$V; 0))" gibt das korrekte Ergebnis "2091102" aus.
Ich würde mich freuen, wenn mir jemand dabei helfen könnte, die Gesamtformel lauffähig zu machen.
Vielen Dank im Voraus.
Ich kann auf der Arbeit nur Excel 2000 nutzen und versuche folgende Formel zum Laufen zu bekommen:
=index(adresse(summe(zeile(index($G$1:$G$149; vergleich($A177; $G:$G; 0))); 1); 7):$G$149; vergleich("*"; $V:$V; 0))
Leider gibt mir Excel immer aus, die eingegebene Formel enthalte einen Fehler, spezifiziert diesen aber nicht weiter.
Besonders seltsam finde ich das, weil die Einzelteile der Formel problemlos funktionieren:
"=adresse(summe(zeile(index($G$1:$G$149; vergleich($A177; $G:$G; 0))); 1); 7)" gibt das korrekte Ergebnis "$G$7" aus.
"=index($G$7:$G$149; vergleich("*"; $V:$V; 0))" gibt das korrekte Ergebnis "2091102" aus.
Ich würde mich freuen, wenn mir jemand dabei helfen könnte, die Gesamtformel lauffähig zu machen.
Vielen Dank im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 231207
Url: https://administrator.de/contentid/231207
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
9 Kommentare
Neuester Kommentar
Moin NickMcNaim,
auch ohne nun extra ein Excel oder Calc dafür anzuwerfen: Das kann so nicht funktioneren und ist auch um drei Ecken zu kompliziert gedacht.
Ich glaube verstanden zu haben, dass die Formel
- in der Spalte G erstma' nach dem Wert aus $A177 suchen soll
- eine Zeile nach der Fund-Zeile beginnt die eigentliche Suche
(z.B. Wert von $A177 gefunden in Zelle $G$6 -> dann neuer Suchbeginn = $G$7)
- Im Bereich $G$7:$:G$149 soll dann das Element x genommen werden
- mit x=vergleich("*"; $V:$V; 0) = erste Zelle mit Test in Spalte V
Dat geiht einfacher, wenn das das Ziel ist.
Der Fehler oben in der Formel ist
Also einen Text "$G$7" unmittelbar gefolgt von einem Doppelpunkt und irgendwas... TILT.
Das wird sich auch bei Excel-Versionen >= 2013 nicht interpretieren lassen.
Sag noch mal, was denn nun der Plan ist, dann entwickeln wir eine Lösung dafür.
Grüße
Biber
auch ohne nun extra ein Excel oder Calc dafür anzuwerfen: Das kann so nicht funktioneren und ist auch um drei Ecken zu kompliziert gedacht.
Ich glaube verstanden zu haben, dass die Formel
- in der Spalte G erstma' nach dem Wert aus $A177 suchen soll
- eine Zeile nach der Fund-Zeile beginnt die eigentliche Suche
(z.B. Wert von $A177 gefunden in Zelle $G$6 -> dann neuer Suchbeginn = $G$7)
- Im Bereich $G$7:$:G$149 soll dann das Element x genommen werden
- mit x=vergleich("*"; $V:$V; 0) = erste Zelle mit Test in Spalte V
Dat geiht einfacher, wenn das das Ziel ist.
Der Fehler oben in der Formel ist
"=index($G$7:$G$149; vergleich("*"; $V:$V; 0))" gibt das korrekte Ergebnis "2091102" aus.
Mag ja sein, aber in der Gesamt-Formel hast du nicht stehen:=index($G$7:$G$149; vergleich("*"; $V:$V; 0)) // das hast du NICHT stehen
=index("$G$7":$G$149; vergleich("*"; $V:$V; 0)) // das hast du stehen !!
Das wird sich auch bei Excel-Versionen >= 2013 nicht interpretieren lassen.
Sag noch mal, was denn nun der Plan ist, dann entwickeln wir eine Lösung dafür.
Grüße
Biber
Moin NickMcName,
War ja eher eine Rückfrage als eine Antwort.
Ich hab's dank Deinem Hinweis gerade doch noch geschafft:
=index(indirekt(adresse(summe(zeile(index($G$1:$G$149; vergleich($A177; $G:$G; 0))); 1); 7)):$G$149; vergleich("*"; $V:$V; 0))
INDIREKT war also des Rätsels Lösung.
Nein, Nein. Nein.
"Indirekt()" wäre ein Workaround, um mit deiner Strategie (die IMHO um 3 Ecken zu kompliziert gedacht ist), einen überflüssigen Schritt weiterzukommen.
Aber den Weg will ich dir ja ausreden.
Also, folgender Vorschlag:
In deine Zelle $A$187 oder eine x-beliebige andere Zelle mit ein ein paar freien Zellen darunter:
Als Matrixformel eingeben, also mit Ctrl-Shift-Enter absch(l)iessen statt nur mit Enter.
Dann nach unten kopieren (aber max in die nächsten 200 Zellen.
Alle Belegnummern (Spalte G) mit einem "*" (Sternchen) in Spalte V werden aufgelistet.
P.S.
Ein bissle verständlicher/lesbarer wird die Formel, wenn du die "Anzahl Zellen mit einem Sternchen" in Spalte V in einem benannten Feld "AnzMarkiert" errechnest (Formel =Zählenwenn(...)) aus der obigen Formel.
Dann reduziert sich die Matrixformel auf:
( wieder mit Ctrl-Shift-Enter eingeben.)
P.P.S. Es wird NICHT explizit auf ein Sternchen (*") geprüft, gedenfalls nicht von der ZÄHLENWENN()-Funktion. Die interpretiert das als Wildcard, also als "beliebigen Text.
FALLS in Spalte V auch etwas anderes stehen kann als "*" oder "leere Zellen", dann würde ich eher statt "*" ein "x" als Markierung verwenden.
Oder aber, das "*"-Zeichen maskieren bei Zählenwenn:
Grüße
Biber
War ja eher eine Rückfrage als eine Antwort.
Ich hab's dank Deinem Hinweis gerade doch noch geschafft:
=index(indirekt(adresse(summe(zeile(index($G$1:$G$149; vergleich($A177; $G:$G; 0))); 1); 7)):$G$149; vergleich("*"; $V:$V; 0))
INDIREKT war also des Rätsels Lösung.
"Indirekt()" wäre ein Workaround, um mit deiner Strategie (die IMHO um 3 Ecken zu kompliziert gedacht ist), einen überflüssigen Schritt weiterzukommen.
Aber den Weg will ich dir ja ausreden.
Also, folgender Vorschlag:
In deine Zelle $A$187 oder eine x-beliebige andere Zelle mit ein ein paar freien Zellen darunter:
=WENN(ZÄHLENWENN($V$1:$V$200;"*")<ZEILE($A1);"";INDEX($G$1:$G$200;KGRÖSSTE((V$1:V$200="*")*ZEILE($G$1:$G$200);ZÄHLENWENN($V$1:$V$200;"*")+1-ZEILE($A1))))
Dann nach unten kopieren (aber max in die nächsten 200 Zellen.
Alle Belegnummern (Spalte G) mit einem "*" (Sternchen) in Spalte V werden aufgelistet.
P.S.
Ein bissle verständlicher/lesbarer wird die Formel, wenn du die "Anzahl Zellen mit einem Sternchen" in Spalte V in einem benannten Feld "AnzMarkiert" errechnest (Formel =Zählenwenn(...)) aus der obigen Formel.
Dann reduziert sich die Matrixformel auf:
=WENN(AnzMarkiert<ZEILE($A1);"";INDEX($G$1:$G$200;KGRÖSSTE((V$1:V$200="*")*ZEILE($G$1:$G$200);AnzMarkiert+1-ZEILE($A1))))
P.P.S. Es wird NICHT explizit auf ein Sternchen (*") geprüft, gedenfalls nicht von der ZÄHLENWENN()-Funktion. Die interpretiert das als Wildcard, also als "beliebigen Text.
FALLS in Spalte V auch etwas anderes stehen kann als "*" oder "leere Zellen", dann würde ich eher statt "*" ein "x" als Markierung verwenden.
Oder aber, das "*"-Zeichen maskieren bei Zählenwenn:
=ZÄHLENWENN($V$1:$V$200;"~*")
.Grüße
Biber
Moin NickMcNaim,
okay, Matrix-Formeln in verbundenen Zellen sind etwas tricky.... wenn es sich durch eine Layout-Änderung (also einer Anzeige der Werte nicht in Spalte A, sondern in einer "normalen" Spalte) lösen liesse, wäre es weniger aufwendig.
Matrixformeln funktionieren auch in verbundenen Zellen, aber sie müssen eingegeben werden in "normale" Zellen. Wenn die Formel ein Ergebnis liefert, dann kannst nachträglich diese Zelle mit Nachbarzellen verbinden.
Aber: das tut man nicht. Das ist bei Microsoft ein weder dokumentiertes noch zugesichertes Verhalten und evtl. nicht mal gewollt.
Zu deinem Erklärungsversuch 2/"In Blöcke unterteilt":
Meine Formel sucht ja nur in Spalte V.
Da kann nix schiefgehen (wenn da keine Verbund.Zellen dabei sind).
Der erste Erklärungsversuch "Wenn-Formel" ist hilfreicher:
Wenn ich in "meine" Spalte V eine Wenn-Formel-eingebe, dann habe ich auch Unsinn, wenn das P.P.S. aus meinem letzten Kommentar ignoriert wird.
(Nur mein Test für einfache Wenn-Formel, brauchst du NICHT nachturnen!)
Ich habe in V1 und nach unten kopiert:
...damit bekommt jede dritte Zeile ein "*"
Falls der Zählenwenn-Teil meiner Formel KEINE Maskierung mit Tilde enthält, denn werden ALLE Spalte-V-Zellen als Fundstellen von "*" gewertet. Also als "Ich habe einen beliebigen Text gefunden".
Bitte die Formel MIT Maskierung verwenden:, 2. Parameter ist "~*" für "genau ein Sternchen, ich meine jetzt keine Wildcard"
Probier mal, ob das greift.
Wenn ja, dann erklär ich auch die Formel, sonst entsorgen wir die.
P.S. Poste doch mal deine angepasste Formel und schreib, in welcher Zelle sie steht.
Grüße
Biber
okay, Matrix-Formeln in verbundenen Zellen sind etwas tricky.... wenn es sich durch eine Layout-Änderung (also einer Anzeige der Werte nicht in Spalte A, sondern in einer "normalen" Spalte) lösen liesse, wäre es weniger aufwendig.
Matrixformeln funktionieren auch in verbundenen Zellen, aber sie müssen eingegeben werden in "normale" Zellen. Wenn die Formel ein Ergebnis liefert, dann kannst nachträglich diese Zelle mit Nachbarzellen verbinden.
Aber: das tut man nicht. Das ist bei Microsoft ein weder dokumentiertes noch zugesichertes Verhalten und evtl. nicht mal gewollt.
Zu deinem Erklärungsversuch 2/"In Blöcke unterteilt":
Meine Formel sucht ja nur in Spalte V.
Da kann nix schiefgehen (wenn da keine Verbund.Zellen dabei sind).
Der erste Erklärungsversuch "Wenn-Formel" ist hilfreicher:
Wenn ich in "meine" Spalte V eine Wenn-Formel-eingebe, dann habe ich auch Unsinn, wenn das P.P.S. aus meinem letzten Kommentar ignoriert wird.
(Nur mein Test für einfache Wenn-Formel, brauchst du NICHT nachturnen!)
Ich habe in V1 und nach unten kopiert:
=WENN(REST(Zeile($A1);3)=0;"*";"")
Falls der Zählenwenn-Teil meiner Formel KEINE Maskierung mit Tilde enthält, denn werden ALLE Spalte-V-Zellen als Fundstellen von "*" gewertet. Also als "Ich habe einen beliebigen Text gefunden".
Bitte die Formel MIT Maskierung verwenden:, 2. Parameter ist "~*" für "genau ein Sternchen, ich meine jetzt keine Wildcard"
=WENN(ZÄHLENWENN($V$1:$V$200;"~*")<....
Probier mal, ob das greift.
Wenn ja, dann erklär ich auch die Formel, sonst entsorgen wir die.
P.S. Poste doch mal deine angepasste Formel und schreib, in welcher Zelle sie steht.
Grüße
Biber
Moin NickMcNaim,
mein Fehler.
Ich war davon ausgegangen, dass die Spalten G und V ab Zeile 1 gefüllt sind.
Wenn der Spass erst in Zeile 5 losgeht, dann natürlich:
In dem benamsten Feld "AnzMarkiert"
In Zelle A177 (und nach unten kopiert:
Und jezz' die Erklärung:
Von aussen nach innen:
In "AnzMarkiert" steht zB.bei dir der Wert 2 für zwei gefundene Sternchen.
-> wenn die Anzahl der mit "*" markierten Felder im Bereich $V5:V$200
- kleiner ist als (Wert von Zeile(A1) == 1 in der ersten Formel in Zelle $A$177 --> 2 ist nicht kleiner 1, also mach "wasanderes"
- kleiner ist als (Wert von Zeile(A2) == 2 in der zweiten Formel in Zelle $A$178 --> 2 ist nicht kleiner 2, also mach "wasanderes"
- kleiner ist als (Wert von Zeile(A3) == 3 in der dritten Formel in Zelle $A$179 --> 2 ist kleiner 3, also mach nicht "wasanderes", sondern gib einen Leerstring "" aus
usw.
"wasanderes" besteht aus der Formel:
-oder-
Nimm vom der Matrix
Das Argument
(Anmerkung: ich hab unterstellt, dass die Werte von $G$5 bis maximal $G$200 gehen.
Wenn die bei dir nur bis $V$149 gehen, dann Bereich anpassen)
-> also von allen Elementen in $V$5;$V$200 eine 1 (==WAHR), wenn ein "*" enthalten ist, mal Zeilennummer
-> bzw. von allen Elementen in $V$5;$V$200 eine 0 (==UNWAHR), wenn kein "*" enthalten ist, mal Zeilennummer
Statt
Hauptsache die Länge der Vektors ist gleich der Länge des Vektors $V$5 bis $V$200
Der Vektor, der im vorigen Schritt berechnet wurde, besteht aus vielen Null-Werten (für FALSCH * ZeileX) und einigen wenigen WAHR*ZeileY-Werten.
Nur diese will ich anzeigen, aber nicht die Grösste zuerst (die in der letzten Fund-Zeile), sondern die in der "obersten" Fundzeile zuerst.
Deshalb die kleine Manipulation:
usw.
Hoffe,es klappt jetzt und ist klarer.
Grüße
Biber
mein Fehler.
Ich war davon ausgegangen, dass die Spalten G und V ab Zeile 1 gefüllt sind.
Wenn der Spass erst in Zeile 5 losgeht, dann natürlich:
In dem benamsten Feld "AnzMarkiert"
=ZÄHLENWENN($V$5:$V$200;"~*")
In Zelle A177 (und nach unten kopiert:
=WENN(AnzMarkiert<ZEILE($A1);"";INDEX($G$5:$G$200;KGRÖSSTE((V$5:V$200="*")*ZEILE($G$1:$G$196);AnzMarkiert+1-ZEILE($A1))))
Und jezz' die Erklärung:
=WENN(AnzMarkiert<ZEILE($A1);"";INDEX($G$5:$G$200;KGRÖSSTE((V$5:V$200="*")*ZEILE($G$1:$G$196);AnzMarkiert+1-ZEILE($A1))))
=WENN(AnzMarkiert<ZEILE($A1);""; wasanderes)
In "AnzMarkiert" steht zB.bei dir der Wert 2 für zwei gefundene Sternchen.
-> wenn die Anzahl der mit "*" markierten Felder im Bereich $V5:V$200
- kleiner ist als (Wert von Zeile(A1) == 1 in der ersten Formel in Zelle $A$177 --> 2 ist nicht kleiner 1, also mach "wasanderes"
- kleiner ist als (Wert von Zeile(A2) == 2 in der zweiten Formel in Zelle $A$178 --> 2 ist nicht kleiner 2, also mach "wasanderes"
- kleiner ist als (Wert von Zeile(A3) == 3 in der dritten Formel in Zelle $A$179 --> 2 ist kleiner 3, also mach nicht "wasanderes", sondern gib einen Leerstring "" aus
usw.
"wasanderes" besteht aus der Formel:
=INDEX($G$5:$G$200;KGRÖSSTE((V$5:V$200="*")*ZEILE($G$1:$G$196);AnzMarkiert+1-ZEILE($A1))
-oder-
Nimm vom der Matrix
=INDEX($G$5:$G$200; diesezeile;dieseSpalte)
Das Argument
dieseSpalte
habe ich nicht angegeben, es wird der Default 1 angenommen, also die Spalte 1 der einspaltigen Matrix.(Anmerkung: ich hab unterstellt, dass die Werte von $G$5 bis maximal $G$200 gehen.
Wenn die bei dir nur bis $V$149 gehen, dann Bereich anpassen)
diesezeile
errechnet sich aus:=KGRÖSSTE((V$5:V$200="*")*ZEILE($G$1:$G$196); nGrösstesElement)
-> also von allen Elementen in $V$5;$V$200 eine 1 (==WAHR), wenn ein "*" enthalten ist, mal Zeilennummer
-> bzw. von allen Elementen in $V$5;$V$200 eine 0 (==UNWAHR), wenn kein "*" enthalten ist, mal Zeilennummer
Statt
ZEILE($G$1:$G$196)
hätte ich auch ZEILE($X$1:$X$196)
oder auch nur ZEILE($1:$196)
schreiben können,Hauptsache die Länge der Vektors ist gleich der Länge des Vektors $V$5 bis $V$200
nGrösstesElement
Der Vektor, der im vorigen Schritt berechnet wurde, besteht aus vielen Null-Werten (für FALSCH * ZeileX) und einigen wenigen WAHR*ZeileY-Werten.
Nur diese will ich anzeigen, aber nicht die Grösste zuerst (die in der letzten Fund-Zeile), sondern die in der "obersten" Fundzeile zuerst.
Deshalb die kleine Manipulation:
nGrösstesElement
=>AnzMarkiert+1-ZEILE($A1)
in der ersten Ausgabezeile A177-> 2+1-1==2nGrösstesElement
=>AnzMarkiert+1-ZEILE($A2)
in der ersten Ausgabezeile A178-> 2+1-2==1usw.
Hoffe,es klappt jetzt und ist klarer.
Grüße
Biber
Moin NickMcNaim,
da kann ich auch nichts Böses sehen in deiner Formel..
Ich habe es eben in meiner Testmappe nachgestellt und (erwartungsgemäß) macht es keinen Unterschied -läuft nach wie vor.
Meine Vermutung war eher, dass die "Bereichsgrenzen" der Spalten G und V in deiner Tabelle andere sind als in meinem Blindtest.
ich kann dir bestenfalls anbieten, deine Exceltabelle per Mail an meine im Profil angegebene Adresse zu schicken - vorausgesetzt, die ist keine 188 Terabyte gross.
Grüße
Biber
da kann ich auch nichts Böses sehen in deiner Formel..
Ich habe es eben in meiner Testmappe nachgestellt und (erwartungsgemäß) macht es keinen Unterschied -läuft nach wie vor.
Meine Vermutung war eher, dass die "Bereichsgrenzen" der Spalten G und V in deiner Tabelle andere sind als in meinem Blindtest.
ich kann dir bestenfalls anbieten, deine Exceltabelle per Mail an meine im Profil angegebene Adresse zu schicken - vorausgesetzt, die ist keine 188 Terabyte gross.
Grüße
Biber