Kombinieren Sie mehrere Spalten in mehreren Zeilen basierend auf dem Wert einer Spalte, bis sich der Wert ändert.

Kombinieren Sie mehrere Spalten in mehreren Zeilen basierend auf dem Wert einer Spalte, bis sich der Wert ändert.

In Bezug auf das angehängte Bild mit Beispieldaten möchte ich Datum, Person und Notiz aus mehreren Zeilen in einer Zeile mit Zeilenumbrüchen für jeden Satz kombinierter Werte kombinieren. Jede Notiz nimmt eine Zeile ein, wobei Name und ID leer bleiben, daher muss jede Zeile unter der Hauptzeile mit Werten kombiniert werden. Daten und gewünschte Ausgabe finden Sie im angehängten Bild.

Beispieldaten:

+-------+--------------+------------------+---------+-----------------------+
| Name  |      ID      |       Date       | Person  |         Notes         |
+-------+--------------+------------------+---------+-----------------------+
| Danny | UID11224512  | 11/5/2019        | Joe     | <p>Note for Danny</p> |
|       |              | 11/5/2019        | John    | <p>Note 2</p>         |
| Joe   | UID11224956  | 11/5/2019 18:54  | Someone | <p>Note 1</p>         |
|       |              | 11/5/2019 18:54  | Someone | <p>Note 2</p>         |
| Jane  | UID11224959  | 11/5/2019 18:54  | Danny   | <p>Note 1 </p>        |
|       |              | 11/5/2019 17:33  | Shawn   | <p>Note 3</p>         |
|       |              | 11/6/2019 18:54  | Jane    | <p>Note 2</p>         |
| Tom   | UID115466652 |                  |         |                       |
| Eric  | UID168998955 |                  |         |                       |
| Paula | UID166559885 |                  |         |                       |
| Frank | UID112249569 | 11/5/2019 18:54  | Someone | <p>Note 1</p>         |
|       |              | 11/6/2019 18:54  | Someone | <p>Note 2</p>         |
|       |              | 11/7/2019 18:54  | Someone | <p>Note 3</p>         |
|       |              | 11/8/2019 18:54  | Someone | <p>Note 4</p>         |
|       |              | 11/9/2019 18:54  | Someone | <p>Note 5</p>         |
|       |              | 11/10/2019 18:54 | Someone | <p>Note 6</p>         |
| Paul  | UID1665588   |                  |         |                       |
+-------+--------------+------------------+---------+-----------------------+

Gewünschte Ausgabe:

+-------+--------------+-----------------------------------+
| Name  |      ID      |               Notes               |
+-------+--------------+-----------------------------------+
| Danny | UID11224512  | "11/5/2019 (Joe) - Note for Danny |
|       |              | 11/5/2019 (John) - Note 2"        |
| Joe   | UID11224956  | "11/5/2019 (Someone) - Note 1     |
|       |              | 11/5/2019 (Someone) - Note 2"     |
| Jane  | UID11224959  | "11/5/2019 (Danny) - Note 1       |
|       |              | 11/5/2019 (Shawn) - Note 2        |
|       |              | 11/5/2019 (Jane) - Note 3"        |
| Tom   | UID115466652 |                                   |
| Eric  | UID168998955 |                                   |
| Paula | UID166559885 |                                   |
| Frank | UID112249569 | "11/5/2019 (Someone) - Note 1     |
|       |              | 11/6/2019 (Someone) - Note 2      |
|       |              | 11/7/2019 (Someone) - Note 3      |
|       |              | 11/8/2019 (Someone) - Note 4      |
|       |              | 11/9/2019 (Someone) - Note 5      |
|       |              | 11/10/2019 (Someone) - Note 6"    |
| Paul  | UID1665588   |                                   |
+-------+--------------+-----------------+---------+-----------------------------------+


    

Beispieldaten:
Beispieldaten

Gewünschte Ausgabe:
Gewünschte Ausgabe

Antwort1

Eine Möglichkeit hierfür ist Power Query, verfügbar in Windows Excel 2010+ und Office 365.

  • Wählen Sie eine Zelle in Ihrer Datentabelle aus
    • Data => Get&Transform => from Table/Range
    • In der Power Query-Benutzeroberfläche:Home => Advanced Editor
    • Notieren Sie sich den Tabellennamen in Zeile 2
    • Fügen Sie den untenstehenden MCode in das Fenster ein
    • Ändern Sie den Tabellennamen in Zeile 2 in Ihren tatsächlichen Tabellennamen
    • Lesen Sie den Code und die Kommentare und untersuchen Sie das Applied StepsFenster, um zu verstehen, was passiert.

Kurzer Algorithmus

  • Fill downdie Leerzeichen für die Spalten Name und ID
  • Groupnach den Spalten „Name“ und „ID“
  • Extrahieren Sie dieErsteDatum, Person und Notiz wie gezeigt in separaten Spalten
  • Fassen Sie alle Daten/Personen/Notizen (durch Zeilenumbrüche getrennt) für die letzte Spalte zusammen

M-Code
Ändern Sie im folgenden Code unbedingt den Tabellennamen in Zeile 2 in Ihren tatsächlichen Tabellennamen.

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"ID", type text}, {"Date", type datetime}, {"Person", type text}, {"Notes", type text}}),
    
//Fill down to fill in the blanks for Name and ID columns
    #"Filled Down" = Table.FillDown(#"Changed Type",{"Name", "ID"}),

//Group on Name and ID -- should be the same so this is a double check.
    #"Grouped Rows" = Table.Group(#"Filled Down", {"Name", "ID"}, {

//For each Name/ID
    //Extract first Date as a date string if it has no time component, otherwise leave it as a datetime 
        {"Date", each if DateTime.Time([Date]{0}) = #time(0,0,0)
                            then DateTime.ToText([Date]{0},"MM/dd/yy")
                            else [Date]{0}},
    //Extract first Person
        {"Person", each [Person]{0}},

    //extract first Note
        {"Notes.1", each [Notes]{0}},

    //Extract and combine, for each note, the Date, person, and note
    //  Then split the combination for each entry by linefeed.
        {"Notes.2", (t)=> Text.Combine(
                            List.Generate(() => [Count=1, 
                            dt =DateTime.ToText(t[Date]{0},"MM/dd/yyyy") & " (" & 
                                t[Person]{0} & 
                                ") - " & t[Notes]{0}],
                         each [Count] <= Table.RowCount(t), 
                         each [Count = [Count] + 1, dt = DateTime.ToText(t[Date]{[Count]},"MM/dd/yyyy") & 
                                    " (" & t[Person]{[Count]} & 
                                    ") - " & t[Notes]{[Count]}],
                         each [dt]),"#(lf)")
                    }
        })
in
    #"Grouped Rows"

Daten
Bildbeschreibung hier eingeben

Ergebnisse
Bildbeschreibung hier eingeben

In Excel müssen Sie die Notes.2Spalte auf Wrap Textund die DateSpalte auf mm/dd/yyyy hh:mm ( formatieren.In der Datumsspalte werden die Daten ohne Uhrzeit als Textzeichenfolgen zurückgegeben, haben also nicht dasselbe Format – wie Sie wiederum in Ihrer Frage zeigen)

Antwort2

Stellen Sie sicher, dass Sie „Text umbrechen“ im Menüband „Start“ für die gesamte Kommentarspalte festlegen. Verwenden Sie diese Formel, um Textwerte mit Zeilenumbrüchen zu kombinieren:

="comment1" & CHAR(10) & "Comment2"

Wenn Sie zwei separate Tabellen kombinieren, lohnt es sich möglicherweise, Power Query in Excel auszuprobieren.

verwandte Informationen