%3F.png)
Ich habe viele Daten, die so aussehen. Sie haben zwei Spalten:
Name | |
---|---|
Bob | [email geschützt] |
Bob | [email geschützt] |
Bob | [email geschützt] |
Ausfall | [email geschützt] |
Ausfall | [email geschützt] |
Aber ich brauche es so: Ein Name pro Zeile, wobei die E-Mails nach Bedarf als zusätzliche Spalten hinzugefügt werden. Für jeden Namen gibt es eine unbekannte Anzahl von E-Mails:
Name | E-Mail 1 | E-Mail 2 | E-Mail 3 |
---|---|---|---|
Bob | [email geschützt] | [email geschützt] | [email geschützt] |
Ausfall | [email geschützt] | [email geschützt] |
Ich muss dies für eine riesige Tabelle mit Tausenden von Zeilen tun. Ich kann also nicht jede Zeile manuell konvertieren, indem ich etwas wie „Transponieren“ verwende. Ich brauche eine Massen-/Batch-/Automatisierungslösung.
Ich weiß, dass es VBA gibt, aber ich weiß nicht, wie man es codiert. Wenn das die Lösung ist, können Sie mir bitte sagen, wie der Code aussehen soll?
Auch Nicht-VBA-Lösungen sind herzlich willkommen.
Antwort1
Verwenden vonMüllerund ausgehend von dieser CSV:
Name,Email
bob,[email protected]
bob,[email protected]
bob,[email protected]
sally,[email protected]
sally,[email protected]
Du kannst rennen:
mlr --csv nest --ivar ";" -f Email then nest --explode --values --across-fields -f Email then unsparsify input.csv >output.csv
erhalten:
Name | E-Mail_1 | E-Mail_2 | E-Mail_3 |
---|---|---|---|
Bob | [email geschützt] | [email geschützt] | [email geschützt] |
Ausfall | [email geschützt] | [email geschützt] | - |
Antwort2
Beginnen wir mit Ihrem Beispiel: Spalte A: Name, Spalte B: E-Mail
- Geben Sie diese Matrixformel
=INDEX($A$2:$A$6, MATCH(0, COUNTIF($D$1:$D1, $A$2:$A$16), 0))
in eine leere Zelle ein, z. B. D2, und drücken Sie gleichzeitig die Tasten Umschalt + Strg + Eingabe, um das richtige Ergebnis zu erhalten, siehe Screenshot:
- Ziehen Sie die Zelle nach unten, um alle Werte in Spalte D einzufügen. Das Ergebnis ist wie im Screenshot oben.
- In der ZelleE2Fügen Sie diese Formel dort ein, wo Sie Ihre E-Mail haben möchten
=IFERROR(INDEX($B$2:$B$16, MATCH(0,COUNTIF($D2:D2,$B$2:$B$16)+IF($A$2:$A$16<>$D2,1,0),0)),"")
- Ziehen Sie die Zelle 5–10 Zellen nach rechts (oder so viele, wie Sie für ausreichend halten), um sie auszufüllen, und ziehen Sie die Zeile dann nach unten, um die E-Mail-Adressen der einzelnen Personen einzutragen.
Antwort3
Antwort4
Wenn Sie eine neue Excel-Version haben, können Sie diese Formeln verwenden.
Dann kannst du es so machen:
Das BlaueTabelle heißt
Table1
.
Verwendete Formeln:
- Teil 3:
=UNIQUE(Table1[Name])
- F2:N2:
="Mail"&COLUMN()-COLUMN($E$2)
- F3 (nach unten gestreckt):
=INDEX(Table1[Mail];FILTER(TRANSPOSE(SORT(UNIQUE((ROW(Table1[Name])-ROW(Table1[[#Headers];[Name]]))*($E3=Table1[Name]))));TRANSPOSE(SORT(UNIQUE((ROW(Table1[Name])-ROW(Table1[[#Headers];[Name]]))*($E3=Table1[Name]))))>0;""))
Die Tabelle wird durch die SPILL-Funktion der neuen Excel-Versionen gefüllt.
Beispieldatei:https://1drv.ms/x/s!ArVkYVSHnABFiiqzBYLPmoubvdHY?e=p7wOeF
Falls Sie eine ältere Excel-Version verwenden, können die meisten Funktionen mithilfe von Array-Funktionen emuliert werden. Aber es wird viel chaotischer ...