'Text to column' delimit 函数但适用于多个单元格

'Text to column' delimit function but for multiple cells

我有 10 个连续包含数据的单元格,我必须使用 excel 中的 'text to column' 函数将它们一一分隔并将输出放在单独的 column/area.是否可以分隔多个单元格并按顺序放置输出?以下是我的目标示例:

我的目标是将 Col_A 到 Col_D 单元格值定界,并将输出按如下顺序放置在右侧的第 1 部分和第 2 部分列中:

我现在使用的方法是用'Text to columns'函数手动将Col_A到Col_D的每一个1个1个分隔到各自的输出列中。

有没有办法让我按顺序一次将 Col_A 到 Col_D 值分隔开?

PS:我不太擅长VBA,所以如果解决方案需要VBA/Macros,请给我留下一些文档。谢谢。

使用 ms365,尝试:

E1中的公式:

=TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(TEXTJOIN(";",,A1:D1),";","</s><s>")&"</s></t>","//s"))

对于以前的版本 Excel 会有多条路线;一个可以是:

=FILTERXML("<t><s>"&SUBSTITUTE($A1&";"&$B1&";"&$C1&";"&$D1,";","</s><s>")&"</s></t>","//s["&COLUMN(A1)&"]")

向右拖动。或者,更动态一点:

=INDEX(CHOOSE({1;2},MID($A1:$D1,FIND(";",$A1:$D1)+1,LEN($A1:$D1)),LEFT($A1:$D1,FIND(";",$A1:$D1)-1)),MOD(COLUMN(),2)+1,CEILING(COLUMN(A1)/2,1))

通过CtrlShift确认并向右拖动

=TRANSPOSE(FILTERXML("<x><y>"&SUBSTITUTE(TEXTJOIN(";",,1:1),";","</y><y>")&"</y></x>","//y")) 是没有 VBA 的最佳选择(就像已经发布的 JvdV)

对于非Windows,您可以在第一列的单元格中使用它: =IFERROR(IF(ISEVEN(COLUMN()),RIGHT(INDEX(1:1,,ROUNDUP(COLUMN()/2,0)),LEN(INDEX(1:1,,ROUNDUP(COLUMN()/2,0)))-FIND(";",INDEX(1:1,,ROUNDUP(COLUMN()/2,0)))),LEFT(INDEX(1:1,,ROUNDUP(COLUMN()/2,0)),FIND(";",INDEX(1:1,,ROUNDUP(COLUMN()/2,0)))-1)),"")

仅作记录,另一个适用于所有 Excel 版本:

=TRIM(MID(SUBSTITUTE(INDEX($A1:$D1,INT((1+COLUMNS($A1:A1))/2)),";",REPT(" ",99)),99*ISEVEN(COLUMNS($A1:A1))+1,99))

并正确复制。

或者,对于 O365,如果将结果返回到矩形范围是可以接受的:

=LEFT(MID(A1:D1,FIND(";",A1:D1)^{0;1}+{0;1},99),FIND(";",A1:D1)^{1;9}-1)