移动“;”用Excel公式将值分隔到下一行

时间:2019-10-10 15:28:41

标签: excel excel-formula

任何想法如何显示单元格A1中的值:

English; German; French; Spanish; Finnish; Russian

以这种方式使用Excel公式吗?

  A2  English 
  A3  German 
  A4  French 
  A5  Spanish 
  A6  Finnish 
  A7  Russian

4 个答案:

答案 0 :(得分:4)

从Excel 2013开始,您可以使用FILTERXML。您可以将此公式放在A2中:

=INDEX(FILTERXML("<t><s>"&SUBSTITUTE($A$1,"; ","</s><s>")&"</s></t>","//s"),ROW(A1))

向下拖动...

enter image description here

但是,另一个答案是减少键入=)

答案 1 :(得分:3)

将此内容放入A2并复制下来:

=TRIM(MID(SUBSTITUTE($A$1,";",REPT(" ",999)),(ROW(1:1)-1)*999+1,999))

ROW(1:1)只是一个计数器,对于第一个单元格,无论其放在公式的位置还是引用单元格的位置,都应始终为1:1。它会自动复制到2:2,然后移到3:3。公式就是这样知道要返回哪个。

enter image description here


一旦发布了动态数组公式(当前仅适用于Office Insiders),我们可以使用SEQUENCE代替ROW,只需将公式放在第一个单元格中,而无需向下复制,Excel会填写休息:

=TRIM(MID(SUBSTITUTE(A1,";",REPT(" ",999)),SEQUENCE(LEN(A1)-LEN(SUBSTITUTE(A1,";",""))+1,,0)*999+1,999))

enter image description here


为了缩短公式,我们可以使用简单的UDF使用Split()返回值的数组:

Function MYSPLIT(STR As String, del As String) As String()
    MYSPLIT = SPLIT(STR, del)
End Function

然后它是一个简单的INDEX公式:

=INDEX(MYSPLIT($A$1,";"),ROW(1:1))

然后抄下来。

或者释放动态阵列时:

=TRASPOSE(MYSPLIT($A$1,";")) 

仅在第一个单元格中。

答案 2 :(得分:1)

仅供参考,如果您使用的是Excel 2010 Professional Plus或更高版本的Excel,则可以使用 Power Query 解决此问题(但是,如果您只处理一个单元格或少量单元格数据,这种方法可能是一个过大的选择。

首先,将数据加载到电源查询编辑器中;

其次,突出显示相关的列,使用Transform标签下的 Split Columns 功能用分号;分隔值,然后在高级设置中选择将结果进入。然后,您应该具有所需的列表。

最后关闭输出并将其加载到新的工作表中(默认情况下)。

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

答案 3 :(得分:0)

假设输入A1:

English; German; French; Spanish; Finnish; Russian

然后,复制A1并粘贴到A2

选择A2 >> Ctrl + H >>查找内容:输入:“ ;”(不带引号)>>替换为:(保留空白)>>按“全部替换” >>关闭

A2变为:

English German French Spanish Finnish Russian

将列A的宽度减小到宽:8.00(61像素)

选择A2 >> Editing >> Fill,选择Justify >>确定>>完成

最终成为:

A2 English    
A3 German    
A4 French    
A5 Spanish    
A6 Finnish    
A7 Russian