您可以使用 Power Query 获取结果,前提是:
- 有一种可重现的方法来获取 名称
- 在您的示例中,每个名称都是一个单词,并且它们都一起出现在活动子字符串的末尾
- 多名词将需要不同的算法来提取。
使用 Power Query (在 Windows Excel 2010+ 和 Office 365 中可用)
- 选择数据表中的某个单元格
Data => Get&Transform => from Table/Range
- 当 PQ 编辑器打开时:
Home => Advanced Editor
- 记下第 2 行中的表 Name
- 粘贴下面的 M 代码代替您看到的内容
- 将第 2 行中的表名称更改回最初生成的名称。
- 阅读 cmets 并探索
Applied Steps 以了解算法
M 码
let
Source = Excel.CurrentWorkbook(){[Name="TableA"]}[Content],
//need to hard code list of names
names = {"Mary","John","Richard","Tom"},
//Type all as text
#"Changed Type" = Table.TransformColumnTypes(Source,
List.Transform(Table.ColumnNames(Source), each {_, Text.Type})),
//Unpivot to => a two column list
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {}, "Dates", "Value"),
//Extract the names
#"Added Custom" = Table.AddColumn(#"Unpivoted Columns", "Names", each List.Intersect({Text.Split([Value]," "),names})),
//Extract the Activities
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Activity", each Text.Start([Value],Text.PositionOf([Value],[Names]{0})-1)),
//Remove unneeded column
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"Value"}),
//Expand the names to => single row for each name/date
#"Expanded Names" = Table.ExpandListColumn(#"Removed Columns", "Names"),
//Group by Date and Name
// Aggregate the activites
grouped = Table.Group(#"Expanded Names",{"Dates","Names"},{
{"Activities", each Text.Combine([Activity],", "), type text}
}),
#"Pivoted Column" = Table.Pivot(grouped, List.Distinct(grouped[Names]), "Names", "Activities"),
//reArrange columns to desired order
#"Reordered Columns" = Table.ReorderColumns(#"Pivoted Column",List.Combine({{"Dates"}, names}))
in
#"Reordered Columns"
A表
表 B