Einträge/Zeilen zählen
#1
Hallo zusammen
Ich habe ein kleines Excel-Problem, bei dem ihr mir sicher weiterhelfen könnt.

In einer Excel-Tabelle habe ich eine Spalte mit den Artikelnummern, eine Spalte mit den Hauptartikelmarkierungen (X oder Y).

Nun müsste ich in einer Spalte (D) bei allen Einträgen die fortlaufende Nummer der Produkte (Anzahl), in der Spalte E müsste die Total-Produkt-Anzahl eingetragen werden und in der Spalte F die Total Anzahl der Y, die in der Spalte B vorhanden sind. Der Trenner für die Produkte ist in der Spalte A entweder die 9 oder 99. Ein neues Produkt beginnt immer mit einem X in der Spalte B.

Gibt es eine Möglichkeit dies zu vereinfachen, ohne, dass ich das händisch machen muss? Das Problem ist, dass die Artikel immer wieder geändert werden, vor allem die Anzahl.

In der angehängten Exceldatei findet ihr im Reiter «Originaldaten», so wie ich sie erhalte, im Reiter «Ziel» wäre mein gewünschtes Ergebnis.

Ich bin für jede Hilfe sehr dankbar.

Liebe Grüsse und schönen Tag
Dany


Angehängte Dateien
.xlsx   Zaehler.xlsx (Größe: 160,31 KB / Downloads: 9)
Antworten Top
#2
Hi

D2
Code:
=WENN(B2="X";1;WENN(ODER(A2="9";A2="99");"";D1+1))
E2
Code:
=WENN(D2="";"";INDEX(D2:D200;VERGLEICH("";D2:D200;0)-1))
F2
Code:
=WENN(D2="";"";WENN(D2=1;ZÄHLENWENN(BEREICH.VERSCHIEBEN(B2;;;VERGLEICH("";D2:D200;0)-1);"y");F1))
Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • Asterix99
Antworten Top
#3
Hi,

das geht viel einfacher, vorausgesetzt, alle Zahlen sind auch Zahlen und keine Texte und die Leerzellen sind auch leer:

in C4 (alle Formeln soweit wie notwendig nach unten ziehen):

Code:
=WENN(B4="x";A4;C3)

in D4:

Code:
=WENN(A4=99;"";WENN(B4="x";1;D3+1))


in E4:

Code:
=WENN(A4=99;"";MAX(D4:INDEX(D5:$D$99999;VERGLEICH(99;A4:A4:$A$99999;0))))


Bereich.Verschieben ist wohl die schlechteste Funktion, die Excel zu bieten hat.


.xlsx   Zaehler.xlsx (Größe: 13,61 KB / Downloads: 2)
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 2 Nutzer sagen Danke an BoskoBiati für diesen Beitrag:
  • Asterix99, Stephan
Antworten Top
#4
Hallo Elex
Du bist der Hammer, ich habe für die händische Anpassung ewig gebraucht und mit deinen Formeln geht das nun in ein paar Sekunden.  23 23 
Auf jeden Fall werde ich mir deine Formeln in einer ruhigen Minute anschauen und versuchen das ganze zu verstehen.

Ganz herzlichen Dank für deine Hilfe

Liebe Grüsse und schönen Tag
Dany
Antworten Top
#5
Hi

Zitat:Auf jeden Fall werde ich mir deine Formeln in einer ruhigen Minute anschauen und versuchen das ganze zu verstehen.
Das solltest du tun. Ich habe denn Bereich D2:D200  also 199 Zeilen nicht zu groß gemacht. Sollten einzelne Artikel in Anzahl mehr Zeilen belegen musst du anpassen.

@Bosko, deine Fobi mit den Volatilen ist völlig übertrieben. 19 

Gruß Elex
Antworten Top
#6
Hallo Elex
Super, vielen Dank für den Hinweis

Liebe Grüsse und schönen Tag
Dany
Antworten Top
#7
Dany,
damit du noch etwas mehr tun oder anschauen kannst, hier noch ein Vorschlag..
allerdings mit einer Hilfsspalte die ausgeblendet oder irgendwohin gesetzt werden kann.

In Zelle B2537 fehlt ein Bezug, oder wenn so richtig, muss der Aufbau etwas anders gestaltet werden.

Gruß Stephan


Angehängte Dateien
.xlsx   Zaehler.xlsx (Größe: 709,63 KB / Downloads: 3)
[-] Folgende(r) 1 Nutzer sagt Danke an Stephan für diesen Beitrag:
  • Asterix99
Antworten Top
#8
Moin,

auch wenn der Beitrag für den User bereits gelöst ist, anbei meine Lösung mit dynamischen Arrays. Nur in D2 folgende Formel:

PHP-Code:
=LET(Data;$A$2:$C$3957;
 
fnReverse;LAMBDA(Array;INDEX(Array;SEQUENZ(ZEILEN(Array);1;ZEILEN(Array);-1)));
 
fnThunk;LAMBDA(X;LAMBDA(X));
 
vnIndex;SCAN(0;INDEX(Data;0;1);LAMBDA(V;A;WENN(LÄNGE(A)>4;V+1;0)));
 
vnTotal;fnReverse(SCAN(0;fnReverse(vnIndex);LAMBDA(V;A;WENN(A>0;WENN(V>A;V;A);0))));
 
vnBlocks;VSTAPELN(FILTER(SEQUENZ(ZEILEN(Data));INDEX(Data;0;2)="X");ZEILEN(Data)+1);
 
vnYpsilon;MATRIXERSTELLEN(ZEILEN(vnBlocks)-1;1;LAMBDA(X;Y;LET(N;INDEX(vnBlocks;X;1);P;INDEX(vnBlocks;X+1;1)-1;SUMME(--(fnThunk(INDEX(Data;N;2):INDEX(Data;P;2))()="Y")))));
 
vnYpsilonMap;MATRIXERSTELLEN(ZEILEN(Data);1;LAMBDA(X;Y;WENN(INDEX(vnIndex;X;1)>0;LET(N;WENNFEHLER(VERGLEICH(X;vnBlocks;1);0);WENN(N>0;INDEX(vnYpsilon;N;1);""));"")));
 
HSTAPELN(WENN(vnIndex>0;vnIndex;"");WENN(vnTotal>0;vnTotal;"");vnYpsilonMap)) 

- fnReverse ist eine LAMBDA-Funktion, die ein Array invertiert.
- fnThunk ist eine LAMBDA-Funktion, die ein Array als Variable beinhaltet und zum Umgehen von Arrays in Arrays dient.
- vnIndex erstellt die Index-Liste pro Block in Spalte A.
- vnTotal invertiert vnIndex, holt sich den ersten Eintrag, wiederholt diesen bis zum nächsten Block und invertiert wieder.
- vnBlocks erzeugt eine Liste der Indizes an den Positionen wo sich ein X in Spalte B befindet.
- vnYpsilon rechnet aus der Liste der Indizes = dynamischer Bereich = Array = INDEX(Data;N;2):INDEX(Data;P;2) die Anzahl der Y raus.
- vnYpsilonMap erweitert vnYpsilon auf das gesamte Array.

Ist jetzt etwas komplizierter als die Lösungen zuvor, wie z.B. von Elex, und war reine Neugierde meinerseits. :-)

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 2 Nutzer sagen Danke an maninweb für diesen Beitrag:
  • Asterix99,
Antworten Top
#9
Hallo Elex
Super, vielen Dank für den Hinweis

liebe Grüsse und schönen Tag
Dany

Moin zurück
Danke dir für deine Lösung. Ich schaue es mir gerne an.

Liebe Grüsse und schönen Tag
Dany

Hallo Stephan
Vielen Dank auch dir für die Lösung.

Den Fehler in Zeile B2537 habe ich vorhin auch entdeckt 

Liebe Grüsse und schönen Tag
Dany
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste