我有一个包含以下内容的单元格:
A
1 text1;text2;text3;text4;text5
我想把它分成五个单元格,每次出现;
一个,如下所示:
B C D E F
1 text1 text2 text3 text4 text5
我知道Excel有一个“Text to columns”功能,但我需要将其自动化,所以这不是一个选项。我在B1
:
=left(A1;FIND(";";A1;1)-1)
这让我text1
,这就是我想要的。对于下一个单元格,我需要text2
。我试过这个:
=right(A1;len(A1)-len(B1)-1)
我的表现在看起来像这样:
B C
1 text1 text2;text3;text4;text5
我现在的问题是,我需要在第一个;
之后删除所有内容,但我似乎无法弄明白。有什么想法吗?
答案 0 :(得分:1)
如果您希望公式等效于文本到列,A1包含要解析的文本,则在B1中输入:
= TRIM(MID(SUBSTITUTE($ A1,“;”,REPT(“”,999)),COLUMNS($ A:B)* 999-998,999))并复制。
答案 1 :(得分:0)
在执行Text to Columns
时录制宏可以完成这项工作。 ;)
我的记录:
Sub Macro1()
'
' Macro1 Macro
'
'
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
TrailingMinusNumbers:=True
End Sub
清理后:
Sub SplitAndScatter()
With Range("A:A")
.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Semicolon:=True
End With
End Sub
设置向上:强>
<强>结果:强>
希望这有帮助! :)
答案 2 :(得分:0)
这是一种克服上面单元格公式给出的字符限制的方法。
在B1中创建一个助手行,以(尽可能向右)列出从0到安全的“最大”列表元素数量的数字。
将逗号分隔的列表放入A2:A,然后将单个逗号连接到单元格的末尾,例如='sheet 1'!A1&","
行B将处理第一个列表项。在B2中使用以下内容
=LEFT($A2,FIND(",",$A2,1)-1)
C行和右侧将分隔其余元素。在C2中使用以下公式,其中〜是永远不会使用的唯一字符,而SUBSTITUTE($A2,","
...的每个实例的第二个参数中的逗号是您要分割的字符。
=IFERROR(MID($A2,FIND("~",SUBSTITUTE($A2,",","~",C$1))+1,FIND("~",SUBSTITUTE($A2,",","~",D$1))-FIND("~",SUBSTITUTE($A2,",","~",C$1))-1),"")
find()
函数+1
和-1
之后调整偏移量以匹配空格或其他偏移量。故障:
MID($A2, [PART 1] , [PART 2] )
第一个参数$A2
是带有定界文本的单元格,第二个参数是定界符的第 n 个实例的字符数(即起始位置减去一个第 n 个列表项),第三个是 n +1和 n 列表项之间的字符数。
[PART 1]
FIND("~",SUBSTITUTE($A2,",","~",C$1))+1
首先让我们分解内部替换部分:
SUBSTITUTE($A2,",","~",B$1)
第一个参数是您要分割的文本。第二个参数是定界符,在此示例中为逗号。第三个参数是一个随机的唯一字符(如果需要真正唯一的字符,请使用char(160)
之类的字符),最后一个参数是您要替换的定界符(在这种情况下为“”,“')。 / p>
FIND("~",SUBSTITUTE($A2,",","~",C$1))+1
在上面的替代函数的开头添加查找将找到您刚刚替代的唯一字符(在此示例中为"~"
)的位置编号,从而有效地告诉您第二个列表的“起始位置”在哪里项目是。为方便起见,此方法单独处理第一个列表项,因为第一个定界符在第一个列表项之后。 +1是为了确保不包括左侧定界符本身。
[PART 2]
FIND("~",SUBSTITUTE($A2,",","~",D$1))-FIND("~",SUBSTITUTE($A2,",","~",C$1))-1)
这将通过获取 n + 1 分隔符位置来找到列表项的长度,并从 n 分隔符位置中减去它,然后再减去1,因为结尾的分隔符位置本身不应该包含在内。