用值分隔单元格并将相关列移动到新行

Separating a cell with values and moving related columns to a new row

我正在尝试用多个值分隔一列 - 用逗号分隔 - 并将每个值移动到下一行,同时从不同列继承相关值。

我找到了与 R、Perl 等相关的解决方案。但是,我想用 excel 或 excel-vba 来处理这个问题。我也曾尝试使用 excel 的 'Text to Column' 功能,然后使用直接 link 映射新单元格,但这并没有解决我的问题。

下面是excel sheet:

Name         Subject       Topic    Tags
Chinedu      Mathematics   Algebra  Algebra, Trigonometry,  Maths
Sophia       English       Comp     English,comprehension, New tag
Sonia        English       Essay    English, Essay Writing,Tag
John         Maths.        Trig.    Maths, Trigonometry, New

预期输出为:

Name         Subject       Topic    Tags
Chinedu      Mathematics   Algebra  Algebra
Chinedu      Mathematics   Algebra  Trigonometry
Chinedu      Mathematics   Algebra  Maths
Sophia       English       Comp     English
Sophia       English       Comp     comprehension
Sophia       English       Comp     New tag
John         Maths.        Trig.    Maths
John         Maths.        Trig.    Trigonometry
John         Maths.        Trig.    New

您可以使用 Excel 2010 及更高版本.

中可用的 #powerquery

请参阅此 article 以了解如何在您的 Excel.

版本上使用 Power Query

逻辑是将源数据加载到Power Query Editor,使用Transform选项卡下的Split Column功能拆分Tags列以逗号,为分隔符,将结果放入Rows

那么你应该有以下内容:

您可以Trim清理Tags列,使数据整齐,然后加载输出 table 到新工作表(默认情况下)或创建查询连接并选择将其加载到工作簿中的特定位置。

以下是后台电源查询M代码,仅供参考。您只需要使用编辑器的内置功能就可以得到想要的结果。

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"Subject", type text}, {"Topic", type text}, {"Tags", type text}}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Tags", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Tags"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Tags", type text}}),
    #"Trimmed Text" = Table.TransformColumns(#"Changed Type1",{{"Tags", Text.Trim, type text}}),
    #"Cleaned Text" = Table.TransformColumns(#"Trimmed Text",{{"Tags", Text.Clean, type text}})
in
    #"Cleaned Text"

如果您有任何问题,请告诉我。干杯:)