【问题标题】:Split values in cell into columns and rows将单元格中的值拆分为列和行
【发布时间】:2021-06-05 02:50:45
【问题描述】:

是否可以将一个单元格中的数据拆分为单元格和行?我了解通过电源查询,您可以使用 , 作为分隔符将其拆分为 2 列,但我想知道是否也可以使用公式将此数据拆分为行和列。实际所需的输出可以在电子表格中的任何位置(实际上将在 sheet2 中)。

【问题讨论】:

    标签: excel excel-formula office365 delimiter


    【解决方案1】:

    在 Power Query 中,您可以根据您的问题将其拆分为 行和列。

    • 去掉逗号
    • 使用<line feed>作为分隔符分割成行
    • 使用<space> 作为分隔符拆分为列

    -M码

    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
    
        //Remove the extraneous commas
        #"Replaced Value" = Table.ReplaceValue(#"Changed Type",",","",Replacer.ReplaceText,{"Column2"}),
    
        //Split by linefeed into rows
        #"Split Column by Delimiter" = Table.ExpandListColumn(
            Table.TransformColumns(#"Replaced Value", {
                {"Column2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let
                     itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column2"),
        #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column2", type text}}),
        
        //split on the <space> into columns
        #"Split Column by Delimiter1" = Table.SplitColumn(#"Changed Type1", "Column2", 
            Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column2.1", "Column2.2"}),
        #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Column2.1", type text}, {"Column2.2", type text}})
    in
        #"Changed Type2"
    

    【讨论】:

    • 嗨,这很好用,尽管随着我的进步,我现在想知道是否可以用这种方式用 3 列以上的方式拆分数据。例如,第 3 列是以与第 2 列相同的方式列出的所有溶剂(即在一个单元格中)。但是,当电源查询似乎拒绝以这种方式拆分时。作为电源查询的新手,我意识到我最初的问题实际上非常简单,到目前为止还没有使用提供的 M 代码,而只是使用了您上面提供的步骤。以同样的方式您认为可以拆分 3+ 列吗?
    • @Nick 只要有一些合乎逻辑且一致的方法来完成拆分,它应该是可行的。建议将其作为单独的问题发布,以及您尝试过的内容以及遇到的任何问题。您可能需要添加一个索引列以将不同的行保持在一起。
    • 谢谢,是的,我发布了一个新问题,因为我觉得它略有不同。同时会继续努力,看看我是否有什么想法。
    【解决方案2】:

    根据问题通过公式:

    A6中的公式:

    =FILTERXML("<t><s>"&TEXTJOIN("</s><s>",,REPT(A2:A3&"</s><s>",LEN(B2:B3)-LEN(SUBSTITUTE(B2:B3,CHAR(10),""))+1))&"</s></t>","//s[.!='']")
    

    B6中的公式:

    =FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TEXTJOIN(CHAR(10),,B2:B4),",","")&CHAR(10),"ppm"&CHAR(10)," ")," ","</s><s>")&"</s></t>","//s[.*0!=0][.!='']")
    

    C6中的公式:

    =FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TEXTJOIN(CHAR(10),,B2:B4),",","")&CHAR(10),"ppm"&CHAR(10)," ")," ","</s><s>")&"</s></t>","//s[.*0=0]")
    

    虽然我也会根据other 的答案推荐 PowerQuery。

    【讨论】:

    • 谢谢!我会尝试 powerquery 解决方案,但这仍然非常有用
    【解决方案3】:

    是的。通过 Microsoft Excel Text To Columns 功能在 Menu Data > Text To Columns 中找到。

    理想的文本通常是等宽字体(需要等宽字体)或由逗号或其他类型的分隔符分隔。

    提供好的数据 = 更好的结果

    在单击“文本到列”之前,请务必选择要“拆分”的单元格范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多