我想使用来自另一列的逻辑来合并并列出一列的单元格内容 请参阅下面的详细信息
数据集
Name Sales order number
Harry1 1234
Dave2 1235
Mary3 1234
Bill4 1234
Tom5 1235
该公式将查看销售订单号,收集所有具有相同销售订单号的名称,并将这些名称显示在名为“销售方”的单个列中
结果
Name Sales Order Number Sold by
Harry1 1234 Harry1, Mary3, Bill4
Dave2 1235 Dave2, Tom5
Mary3 1234 Harry1, Mary3, Bill4
Bill4 1234 Harry1, Mary3, Bill4
Tom5 1235 Dave2, Tom5
这样做似乎不合逻辑,但我有一个庞大的数据集,然后使用“结果”进行数据透视
通过执行一个简单的 IF 语句,我将名字拉入销售者列,但似乎无法弄清楚如何汇总具有相同销售订单的所有名称并将其列在列中
答案1
您可以使用免费的 MicrosoftPower Query插件。
它不是 VBA,但在这种情况下,除了使用 UI 之外,还有一些编码步骤。
- 将数据集定义为表(在下面的脚本中我称之为“数据集”)
- 在功能区 Power Query 上,在 UI 中导入表(“从表”)
- 将下面的脚本放入高级编辑器(功能区视图->高级编辑器)
这是 M 代码:
let
Source = Excel.CurrentWorkbook(){[Name="Dataset"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Sales order number", Int64.Type}}),
#"Merged Queries" = Table.NestedJoin(#"Changed Type",{"Sales order number"},#"Changed Type",{"Sales order number"},"NewColumn",JoinKind.LeftOuter),
// Function for Merging the matching rows
List_MatchingRows=(Table, Column) =>
let
ColumnToMerge = Table.SelectColumns(Table, Column),
ListMatch = Table.ToList(ColumnToMerge),
SingleLine = Text.TrimEnd(Text.TrimEnd(Lines.ToText(ListMatch, ", ")," "),",")
in
SingleLine,
#"Added Custom" = Table.AddColumn(#"Merged Queries", "Sold by", each List_MatchingRows([NewColumn],"Name")),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"NewColumn"})
in
#"Removed Columns"