【问题标题】:Two columns of data and transpose-matching column A values to the same line两列数据和转置匹配列 A 值到同一行
【发布时间】:2019-12-12 10:36:07
【问题描述】:

我正在尝试几乎完全按照这个 OP 的要求做:

Table of data want to group, transpose matching values same line

虽然答案只统计了每个 A 列项目有多少案例。我想重新审视最初的问题:我有两列数据,为了更容易解释,我将使用名称。我有一个这样的姓氏和家庭成员列表:

COLUMN A  COLUMN B
--------- ---------
Jones     Andy
Jones     Karen
Jones     Jimmy
Jones     Robert
Jones     Susie
Thompson  Henry
Thompson  Beth
Patel     Hardeep
Patel     Sneha
Patel     Radha
Patel     Naveen
Healy     Cillian
Healy     Sinead
Healy     Aiden
Smith     Robert
Smith     Mary
Smith     James
Smith     Christine

我想以这个结束 - 转置列表,然后将每个姓氏的名字沿行分组。

    A         B      C        D        E          F
--------- -------  -------  -------  -------    ------- 
Jones     Andy     Karen    Jimmy    Robert     Susie
Thompson  Henry    Beth
Patel     Hardeep  Sneha    Radha    Naveen 
Healy     Cillian  Sinead   Aiden
Smith     Robert   Mary     James    Christine

和原版海报一样,我不知道每个家庭有多少家庭成员。我想我可以有一个最大的家庭规模(比如 50 个)作为循环限制。我还想我可以使用 range.offset() 遍历列来遍历列和行,然后对空白行做一些事情来清理。

我担心它会很慢。我的用例实际上是位于许多库存仓库(名字)中的工厂零件号(姓氏)。确实,在我们的系统中,一个零件号可能驻留在多达 50 个仓库中。

我愿意接受有关上述姓氏、名字示例的任何建议。

谢谢! 约翰

【问题讨论】:

标签: excel vba transpose


【解决方案1】:

您可以使用 Excel 2010+ 中的Power Query 轻松完成此操作

在 Excel 2016+ 中(在早期版本中可能有所不同)

  • 数据 → 获取和转换 → 从表/范围
  • 在 PQ 编辑器中
    • 选择第 1 列和Group Rows


  • 添加自定义列并输入公式:

Table.Column([Grouped],"Column2")


  • 删除“表格”列
  • 单击“列表”列的双箭头 - 提取值(使用分号作为分隔符)
  • 按分隔符拆分该列

这就是你得到的:


这是上面生成的“M”代码。您可能可以剪切/粘贴它而不是执行上述步骤,但您必须将 Table 的名称从 Table5 更改为实际名称。

let
    Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Column1"}, {{"Grouped", each _, type table [Column1=text, Column2=text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "FirstName", each Table.Column([Grouped],"Column2")),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Grouped"}),
    #"Extracted Values" = Table.TransformColumns(#"Removed Columns", {"FirstName", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "FirstName", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"FirstName.1", "FirstName.2", "FirstName.3", "FirstName.4", "FirstName.5"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"FirstName.1", type text}, {"FirstName.2", type text}, {"FirstName.3", type text}, {"FirstName.4", type text}, {"FirstName.5", type text}})
in
    #"Changed Type1"

【讨论】:

  • 耶...我是电源查询的忠实粉丝。这类转换非常棒。
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 2021-06-06
  • 2022-01-13
相关资源
最近更新 更多