告诉Excel VBA TextToColumns不要用空格分隔
我在Excel 2003中使用VBA。这是我遇到的问题的最简单的例子。 我想只用逗号分割一个string,将其放入行中的单元格中。
在单元格A1中,我有以下string:
AB,C
在VBA中,如果我说Range("A1").TextToColumns Comma:=True,Space:=False
,它符合我的期望。 单元格A1是AB
,单元格B1是C
但是,如果我有这个string:
ABC,D
那么如果我使用Range("A1").TextToColumns Comma:=True,Space:=False
,无论如何它会被Range("A1").TextToColumns Comma:=True,Space:=False
分割! 单元格A1是A
,单元格B1是B
,单元格C1是C,D
(?!)
为什么TextToColumns
在有多个空格时会自动按空格拆分,即使我明确地告诉它不要? 这是一个已知的错误? 有没有解决方法,而不是自己手动parsingstring到列?
你想显式地将DataType
设置为xlDelimited
,否则Excel会假定你的数据是按固定宽度的列排列的,而Excel对这些列有多宽的初始猜测就是空格的位置 – 忽略你在参数列表中select的任何分隔符。
尝试以下,你会看到它重现你的结果:
Range("A1").TextToColumns DataType:=xlFixedWidth
这与删除DataType
参数的结果相同:
Range("A1").TextToColumns
请注意,Excel文档在这方面是错误的:它说xlDelimited
是默认的,但显然xlFixedWidth
是现实中的默认值。
所以,长话短说,你想要的是这样的:
Range("A1").TextToColumns DataType:=xlDelimited, Comma:=True, Space:=False
编辑它看起来像一个多一点的Excel文档可能是错的。 这实际上就像Excel-VBA中的一个bug。 请参阅下面的评论中的讨论。
将ConsecutiveDelimiter
设置为True
:
Range("A1").TextToColumns ,,,True,,,True,False