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 | |
+-------+--------------+-----------------+---------+-----------------------------------+
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 Steps
Fenster, um zu verstehen, was passiert.
Kurzer Algorithmus
Fill down
die Leerzeichen für die Spalten Name und IDGroup
nach 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"
In Excel müssen Sie die Notes.2
Spalte auf Wrap Text
und die Date
Spalte 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.