Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte finden und ausgesuchte addieren

Werte finden und ausgesuchte addieren
13.09.2022 19:06:44
HL
Liebe Excel-Experten,
ich bitte euch um Hilfe bei folgender Aufgabenstellung.
Ich bekomme aus einer externen Datenquelle Informationen in diesem Schema:

|   |     A     |    B      |    C     |    D    |    E    |    F    |    G    |    H    |
| 1 |  Rasse    |  Planet   |  userId  |  TNG_1  |  TNG_2  |  TOS_1  |  VOY_1  |  TNG_3  |
| 2 |  Mensch   |    Erde   |  Picard  |    11   |         |    3    |    13   |         |
| 3 |  Klingone |  Kronos   |  Worf    |    13   |    17   |    5    |         |    4    |
| 3 |  Mensch   |    Erde   |  Riker   |         |    14   |    7    |    15   |    9    |
| 4 |  Mensch   |    Erde   |  Picard  |         |         |    9    |         |    1    |
| 5 |  Android  |  O.Theta  |  Data    |    7    |    9    |    1    |    9    |    11   |
| 6 |  Mensch   |    Erde   |  Riker   |    2    |    12   |         |    3    |         |
| 7 | Reisender |  Kosmos   |  Wesley  |         |         |    2    |         |         |
| 8 |  Mensch   |    Erde   |  Picard  |    3    |    11   |         |    7    |    24   |
Ich benötige nun in einem neuen Arbeitsblatt eine eindeutige Auflistung aller Personen (Spalte mit "userId" in Zeile 1) und der Summe aller Spalten die in Zeile 1 mit "TNG" beginnen in den Zeilen (mehrfaches Vorkommen möglich) in dem dieser Name überall vorkommt.
Die Spalte mit "userId" in Zeile 1 ist dynamisch, es kann also nicht immer von Spalte C ausgegangen werden.
Auch die Spalten mit "TNG" am Beginn sind dynamisch wechselnd und können eine beliebige Anzahl haben.
Die "Überschriften" in Zeile 1 sind natürlich immer in dieser Zeile zu finden.
Beispiel Ergebnis in Arbeitsblatt 2:

|   |    A    |    B   |
| 1 |  Data   |   27   |
| 2 |  Picard |   50   |
| 3 |  Riker  |   37   |
| 3 |  Wesley |   0    |
| 4 |  Worf   |   34   |
Ich würde VBA gern vermeiden.
Könnt ihr mir helfen?
Vielen Dank und "Lebe lange und in Frieden" :)

36
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte finden und ausgesuchte addieren
13.09.2022 19:29:05
ralf_b
Könnte es sein das du deine Excel Basiskenntnisse nicht erweitern möchtest?
EINDEUTIG / FILTER...
13.09.2022 19:29:48
{Boris}
Hi,
...ZÄHLENWENNS, SUMMENPRODUKT - irgendwo darauf wird es hinauslaufen.
Hab aber keine Lust zum Tippen - lad doch mal bitte ne Beispieldatei hoch.
VG, Boris
AW: mit INDEX(), VERGLEICH() & SUMMENPRODUKT() ...
13.09.2022 19:30:18
neopa
Hallo HL,
... nachfolgende Formel K2 einfach nach unten ziehend kopieren.
Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEFGHIJK
1RassePlanetuserIdTNG_1TNG_2TOS_1VOY_1TNG_3 userIdSumme
2MenschErdePicard11 313  Data27
3KlingoneKronosWorf13175 4 Picard50
4MenschErdeRiker 147159 Riker37
5MenschErdePicard  9 1 Wesley0
6AndroidO.ThetaData791911 Worf34
7MenschErdeRiker212 3    
8ReisenderKosmosWesley  2     
9MenschErdePicard311 724   
10           
11           

ZelleFormel
K2=SUMMENPRODUKT((INDEX(A$2:I$9;;VERGLEICH($J$1;$1:$1;0))=J2)*(LINKS(D$1:I$1;3)="TNG")*D$2:I$9)
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Die Daten in Spalte J kannst Du auch mit einer Formel ermitteln. In Deiner XL-Version (die ich nicht habe) geht das realativ einfach in einer Kombination von EINDEUTIG() und SORTIEREN() und wohl als Basis auch INDEX() und VERGLEICH() wie in meiner SUMMENPRODUKT()-Formel eingesetzt.
Gruß Werner
.. , - ...
Anzeige
AW: allerdings setzt meine Formel noch voraus ...
13.09.2022 19:38:42
neopa
Hallo HL,
... dass die Spalten mit den Zahlenwerten immer in Spalte D beginnt. Ist das der Fall oder kann auch die "Text-"Spalten zwischen den "Zahlen-"Wertspalten liegen?
Im anderen Fall müsste die Formel neu definiert werden mit =SUMME(WENN(...)). Notwendig?
Gruß Werner
.. , - ...
AW: für einen solchen Fall, dann ...
13.09.2022 19:48:08
neopa
Hallo,
... so:
Arbeitsblatt mit dem Namen 'Tabelle11'
 ABCDEFGHIJK
1RasseTNG_1PlanetTNG_2TOS_1VOY_1userIdTNG_3 userIdSumme
2Mensch11Erde 313Picard  Data27
3Klingone13Kronos175 Worf4 Picard50
4Mensch Erde14715Riker9 Riker37
5Mensch Erde 9 Picard1 Wesley0
6Android7O.Theta919Data11 Worf34
7Mensch2Erde12 3Riker    
8Reisender Kosmos 2 Wesley    
9Mensch3Erde11 7Picard24   
10           

ZelleFormel
K2{=SUMME(WENN((LINKS(B$1:I$1;3)="TNG")*ISTZAHL(B$2:I$99);(INDEX(A$2:I$99;;VERGLEICH($J$1;$1:$1;0))=J2)*B$2:I$99))}
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Wobei es möglich sein könnte, dass in Deiner XL-Version der spezifische Eingabeabschluss nicht notwendig sein könnte. Teste es.
Gruß Werner
.. , - ...
Anzeige
AW: allerdings setzt meine Formel noch voraus ...
13.09.2022 19:50:33
HL
Hi Werner,
vielen Dank für die rasche Hilfe, es funktioniert bei mir.
Wie von dir angemerkt, gibt es keine Spaltenordnung - die Zahlenwerte beginnen also nicht immer in Spalte D.
Solltest du das noch leicht nachziehen können, wäre ich dir dankbar.
AW: allerdings setzt meine Formel noch voraus ...
13.09.2022 19:55:08
HL
... und es liegen einige Spalten mit Text dazwischen.
AW: dazu sieh mein Beitrag hier von 19:48 owT
13.09.2022 19:59:54
19:48
Gruß Werner
.. , - ...
Weil es so schön ist...
13.09.2022 20:13:14
{Boris}
Hi,
...und auch ein bisschen Spaß macht, hier noch eine 1-Formel-Lösung:
J1:
=LET(
x;SORTIEREN(EINDEUTIG(C2:C9));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT(MTRANS((C2:C9=a)*(LINKS(D1:H1;3)="TNG")*D2:H9);SEQUENZ(8)^0))));
VSTAPELN({"userID"."Summe"};WAHL({1.2};x;y)))
https://www.herber.de/bbs/user/155164.xlsx
VG, Boris
Anzeige
Wahrscheinlich ist es schon längst aufgefallen...
13.09.2022 20:27:28
{Boris}
Hi,
...dass MTRANS hier natürlich nicht nötig ist mit
J1:
=LET(
x;SORTIEREN(EINDEUTIG(C2:C9));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT((C2:C9=a)*(LINKS(D1:H1;3)="TNG")*D2:H9;SEQUENZ(5)^0))));
VSTAPELN({"userID"."Summe"};WAHL({1.2};x;y)))
;-)
VG, Boris
AW: Wahrscheinlich ist es schon längst aufgefallen...
13.09.2022 20:37:38
HL
Danke Boris, ein richtiges Formelmonster, dass du da erschaffen hast :)
Soweit ich sehe, ist für den Einsatz der Formale allerdings vorausgesetzt, dass die Spalte C die mit den Namen ist.
In meiner XL-Version funktioniert sie noch nicht, wie muss ich denn die Ziffer bei Sequenz anpassen und ist "1.2" bei Wahl entscheidend?
Anzeige
Es kann sein....
13.09.2022 20:41:33
{Boris}
Hi,
...dass diese Formel (derzeit) nur in der Beta-Version läuft. Ich vermute, dass es an der Funktion VSTAPELN liegt.
Teste mal bitte folgende Formel - hab VSTAPELN mal rausgelassen (die Funktion fügt eh nur die Überschriften hinzu - war eher ne Spielerei):
=LET(
x;SORTIEREN(EINDEUTIG(C2:C9));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT((C2:C9=a)*(LINKS(D1:H1;3)="TNG")*D2:H9;SEQUENZ(5)^0))));
WAHL({1.2};x;y))
Und ja - derzeit funktioniert sie für Spalte C - das kann man aber natürlich auch noch dynamisieren, wenn Du die Formel denn grundsätzlich einsetzen möchtest.
VG, Boris
Anzeige
AW: Es kann sein....
13.09.2022 20:54:42
HL
In der Original-Tabelle wie hier abgebildet funktioniert die Formel mit Copy-Paste inkl. VSTAPELN sofort und problemlos bei mir.
Meine echte Datenquelle ist allerdings viel größer, hier habe ich die Formel von dir vorerst so angepasst:
=LET(
x;SORTIEREN(EINDEUTIG(Input!CG2:CG4));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT((Input!CG2:CG4=a)*(LINKS(CH1:ZZ1;12)="watched_time")*CH2:ZZ4;SEQUENZ(5)^0))));
WAHL({1.2};x;y))
Die Daten liegen in Blatt "Input".
Es gibt sehr viele Spalten mit Daten.
Ich habe zum Testen vorerst nur drei Datensätze in den Input kopiert, mit tausenden probiere ich es erst nachdem es funktioniert.
"LINKS" habe ich auf 12 Zeichen erweitert.
Bei "SEQUENZ" bin ich mit mit der 5 nicht sicher.
Die User in der ersten Spalte listet Excel korrekt und unique auf, in der zweiten Spalte bekomme ich den #WERT!-Fehler.
Anzeige
SEQUENZ für MMULT
13.09.2022 21:51:41
{Boris}
Hi,
MMULT benötigt in meinem Beispiel ein Zeilenarray, bestehend aus 5 Einsern (das macht SEQUENZ(5)^0 ), weil genau so viele Zeilen benötigt werden, wie es in der ersten Matrix Spalten gibt - da sind es 5 Spalten von D bis H).
Das musst Du entsprechend anpassen.
Aber zeig doch mal Deine Datei.
VG, Boris
AW: SEQUENZ für MMULT
13.09.2022 22:42:39
HL
Mit der Anpassung ist der Fehler nun verschwunden, aber das Ergebnis ist jeweils 0.
Hier die Datei mit dem Demo-Datensatz "Input" und "Formula":
https://www.herber.de/bbs/user/155165.xlsx
So sollte es gehen...
13.09.2022 23:11:46
{Boris}
Hi,
Du hast 2 mal den Blattbezug zu Input vergessen - zudem muss man den Bereich - weil er auch Texte enthält - erst auf ISTZAHL prüfen.
Diese Formel sollte jetzt passen:
=LET(
x;SORTIEREN(EINDEUTIG(Input!CG2:CG4));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT((Input!CG2:CG4=a)*(LINKS(Input!CH1:ZZ1;12)="watched_time")*WENN(ISTZAHL(Input!CH2:ZZ4);Input!CH2:ZZ4);SEQUENZ(617)^0))));
WAHL({1.2};x;y))
VG, Boris
Anzeige
AW: So sollte es gehen...
14.09.2022 00:07:05
HL
Das funktioniert für alle Vorkommnisse von "watched_time" rechts von der Spalte mit der userId. Das erste Vorkommen von "watched_time" ist in diesem Datensatz jedoch links davon in Spalte "AT". So lautet das Ergebnis 257 und 14, sollte jedoch 468 und 19 lauten.
Ich hab versucht den Bereich für die Durchsuchung auf alle Spalten zu erweitern:
=LET(
x;SORTIEREN(EINDEUTIG(Input!CG2:CG4));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT((Input!CG2:CG4=a)*(LINKS(Input!CH1:ZZ1;12)="watched_time")*WENN(ISTZAHL(Input!A2:ZZ4);Input!A2:ZZ4);SEQUENZ(702)^0))));
WAHL({1.2};x;y))
Nun bin ich beim Fehler #NV, weißt du wie man das auf alle Spalten korrekt erweitern kann?
Anzeige
AW: nachgefragt ...
14.09.2022 08:02:35
neopa
Hallo HL,
... wenn Du die Formel von Boris nicht richtig verstehst, warum wendest Du dann nicht eine Lösung mit zwei einfacheren Formeln an?
Gruß Werner
.. , - ...
Am Ende…
14.09.2022 10:15:50
{Boris}
Moin Werner,
…läuft es hier doch lediglich auf das Verständnis für die Funktionsweise für MMULT hinaus - dass man das jetzt auch mit LAMBDA und Konsorten in 1 Formel packen kann, ist doch erstmal nur schmückendes Beiwerk.
Bei 3 Zeilen, aber 702 Spalten, ist das halt recht unübersichtlich und nicht ganz so leicht nachvollziehbar. Ich finde es aber gut, dass HL sich grundsätzlich damit beschäftigt, was bei den meisten Fragern nicht der Fall ist.
VG Boris
Anzeige
AW: ... ist immer ein Anfang ...
14.09.2022 10:34:30
neopa
Hallo Boris,
... aber zumindest für mich als Nichtbesitzer von XL365 ist nicht klar, ob Du nun auch Beta-Funktionalität genutzt hast oder nicht?
Wenn das der Fall sein sollte, sollte dies mE zumindest so vermerkt werden. Denn anderenfalls könnten evtl. Mit- und Nachleser unerklärliche Probleme haben, wenn sie diese Option nicht haben oder eine andere aktuelle XL-Version (21/22) nutzen.
@ HL,
persönlich hab ich kein Problem mit Crossposting, wenn man dieses zumindest angemessen zeitversetzt vornimmt und in allen Foren, wo man seine Frage einstellt auch entsprechend informiert.
Gruß Werner
.. , - ...
AW: ... ist immer ein Anfang ...
14.09.2022 10:37:01
HL
Danke für die Anmerkung Werner, es werden keine Beta-Funktionen genutzt und ich habe in allen Foren den Link zu dieser Lösung hier gepostet.
AW: wo denn überall eingestellt? ...
14.09.2022 10:43:10
neopa
Hallo HL,
... jedenfalls hast Du es bist jetzt zumindest in einem Forum noch nicht selbst getan. Wo hattest Du es noch überall eingestellt?
Gruß Werner
.. , - ...

AW: wo denn überall eingestellt? ...
14.09.2022 10:49:00
HL
Ich befürchte du täuscht dich Werner, ich habe es bereits gestern in den anderen vier Foren selbst gepostet und - soweit verfügbar - den Thread als gelöst markiert.
Und was soll das noch bringen?
14.09.2022 13:48:02
{Boris}
Hi Werner,

Liste doch mal die anderen 4 Foren hier noch auf, wo Du Deine Frage gestellt hattest.
Welchen Mehrwert versprichst Du Dir davon für diesen (Archiv-)Thread?
Ich glaube, HL hat verstanden, dass er das künftig "anders" machen sollte.
VG, Boris
AW: einfach um zu sehen,...
15.09.2022 10:04:07
neopa
Hallo Boris,
... ob er wirklich wie von ihm behauptet und von mir für ein Forum widerlegt - er in allen anderen wenigstens eine Verlinkung oder einen Hinweis eingestellt hat.
Aber hauptsächlich deshalb, um nachzuschauen, ob denn evtl. in den anderen Foren jemand Power Query ins "Spiel" gebracht hat.
Gruß Werner
.. , - ...
MMULT...
14.09.2022 11:02:24
{Boris}
Hi Werner,
...gibt es schon immer - SUMME ebenfalls, und das Einser-Array kann man auch mit ner Konstenten {1;1;1;1;1} oder - wenn es wie hier sehr viele sind - auch schon immer mit ZEILE(1:702)^0 erzeugen (was Du ja natürlich weißt und auch mitunter in Deinen MMULT-Lösungen anwendest).
Da die Lösung bei HL ja funktioniert und er 365 Business (ohne Beta) angegeben hat, erübrigt sich die Frage nach der Funktionsfähigkeit.
Zudem werden nun nach und nach auch alle Beta-Funktionen in die normalen 365-Versionen ausgerollt, so dass in ein paar Monaten niemand mehr über #NAME? stolpern wird.
Long story short: Du hast mir ja geschrieben, was Dich an einem Versionsupgrade hindert - das ist ausschließlich Deine Sache. Aber auch wenn ich mich wiederhole: Das wäre für Dich eine perfekte Spielwiese, weil Du eben ein extrem gutes Verständnis für Formeln und Funktionen hast und Dich ja auch mit VBA nicht beschäftigen möchtest.
VG, Boris
AW: richtig, es ging mir nicht um MMULT() ...
14.09.2022 12:30:08
neopa
Hallo Boris,
... und auch nicht die anderen "älteren" Funktionen.
Mir war es nur so, als ob ich irgendwann mal gelesen hätte, dass NACHZEILE() eine Beta Funktion wäre. Kann aber schon länger her gewesen sein oder ich habe mich falsch erinnert. Wie auch immer, was ich wollte, nämlich eine Bestätigung dessen, dass in Deiner Formel keine Beta Funktion eingesetzt wird, liegt mir nun mit Deiner Aussage vor. Danke.
Deine Aussage: "Zudem werden nun nach und nach auch alle Beta-Funktionen in die normalen 365-Versionen ausgerollt, so dass in ein paar Monaten niemand mehr über #NAME? stolpern wird." berücksichtigt aber nicht, dass jemand, der eine aktuelle Beta-Funktionalität (es wird sicher immer wieder neue geben) nicht besitzt, damit ein Problem hat.
Ich selbst brauch keine Spielwiese, aus dem "Alter" bin ich längst entwachsen ;-) aber möglicherweise interessiert es mich zu gegebener Zeit mehr als momentan.
Gruß Werner
.. , - ...
Du muss alle Matrizen korrekt anpassen...
14.09.2022 09:35:11
{Boris}
Hi,
=LET(
x;SORTIEREN(EINDEUTIG(Input!CG2:CG4));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT((Input!CG2:CG4=a)*(LINKS(Input!A1:ZZ1;12)="watched_time")*WENN(ISTZAHL(Input!A2:ZZ4);Input!A2:ZZ4);SEQUENZ(702)^0))));
WAHL({1.2};x;y))
VG Boris
AW: Du muss alle Matrizen korrekt anpassen...
14.09.2022 10:19:40
HL
Vielen Dank für die Zeit und die Geduld mir dabei zur Seite zu stehen Boris, ich werde nun noch versuchen es dahingehend zu erweitern, dass es die Spalte mit der "userId" selbständig findet. Wenn ich es schaffe, poste ich die Lösung natürlich hier. Alles Gute :)
Achtung - Spoiler!
14.09.2022 10:38:34
{Boris}
Hi,
probier ruhig erstmal selbst aus - die Lösung findest Du, wenn Du ein wenig runterscrollst.
VG, Boris















=LET(
x;SORTIEREN(EINDEUTIG(Input!CG2:CG4));
userID;INDEX(Input!A2:ZZ4;;VERGLEICH("userID";Input!A1:ZZ1;0));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT((userID=a)*(LINKS(Input!A1:ZZ1;12)="watched_time")*WENN(ISTZAHL(Input!A2:ZZ4);Input!A2:ZZ4);SEQUENZ(702)^0))));
WAHL({1.2};x;y))
AW: Achtung - Spoiler!
14.09.2022 11:03:51
HL
Prinzipiell stehe ich ja nicht auf Spoiler ... in diesem Fall habe ich kurz gelugt.
Dein Spoiler geht bereits in der zweiten Zeile davon aus, dass die userId unter Spalte CG steht und nimmt diese (falsche) Basis dann mit.
Aus meiner Sicht funktioniert es so:
=LET(
userID;INDEX(Input!2:4;;VERGLEICH("userID";Input!1:1;0));
x;SORTIEREN(EINDEUTIG(userID));
y;NACHZEILE(x;LAMBDA(a;SUMME(MMULT((userID=a)*(LINKS(Input!1:1;12)="watched_time")*WENN(ISTZAHL(Input!2:4);Input!2:4);SEQUENZ(16384)^0))));
WAHL({1.2};x;y))
Zusätzlich habe ich hier gleich die gesamte Zeile als Basis genommen.
Nun gibt es noch eine letzte statische Angabe und das ist die der Anzahl der Zeilen (hier 2 bis 4).
Hast vollkommen Recht...
14.09.2022 11:11:27
{Boris}
Hi,
...das hatte ich übersehen - hat aber sogar den Vorteil, dass Du es selbst anpassen musstest und somit mitgedacht hast :-)
Der Clou ist ja hier nur, aus einem 2-dimensionalen INDEX mit leerer Zeile (also ;; ) den Parameter Spalte mittels VERGLEICH zu ermitteln:
INDEX(Input!A2:ZZ4;;VERGLEICH("userID";Input!A1:ZZ1;0))
Bezüglich Deiner Ausweitung auf die gesamten Spalten (16.384) muss Du halt prüfen, ob das Deine Performance beeinträchtigt, da MMULT dabei schon ne Menge zu rechnen hat ;-)
Aber in der Beispieldatei ist das noch völlig unerheblich.
VG, Boris
Nachtrag zur "statischen Angabe"...
14.09.2022 11:15:05
{Boris}
Hi,
Nun gibt es noch eine letzte statische Angabe und das ist die der Anzahl der Zeilen (hier 2 bis 4).
Das kann man alles dynamisieren oder auch zu Beginn in Variablen auslagern (halt in der richtigen Reihenfolge, so wie sie benötigt werden - von links nach rechts).
Bekommst Du das selbst hin? Ansonsten frag nach (aber bitte künftig nicht mehr in allen Foren ;-)) )
VG, Boris
AW: Nachtrag zur "statischen Angabe"...
14.09.2022 15:28:43
HL
Ich bin zum Schluss gekommen, dass diese Art der Verarbeitung - einschließlich der einfacheren Vorgängerformel - für Datensätze mit tausenden Zeilen und Spalten ohne händischer Vorbearbeitung selbst für starke 64-bit Systeme nicht machbar sind. Ich werde deshalb die Daten vorher manuell "schrumpfen" und dann die Formel anwenden.
AW: war meine getroffene Vermutung, ...
15.09.2022 10:10:26
neopa
Hallo,
... dass nicht nur 3 Datensätze auszuwerten zutreffend. Neben einer VBA käme dafür auch eine PQ - Lösung in Frage.
Gruß Werner
.. , - ...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige