我在Excel 2003中使用VBA。 这是我遇到的问题最简单的例子。 我想将逗号的字符串拆分为行中的单元格。
在Cell A1中,我有以下字符串:
A B,C
在VBA中,如果我说Range("A1").TextToColumns Comma:=True,Space:=False
,它就会达到我的预期。单元格A1为A B
,单元格B1为C
但如果我有这个字符串:
A B C,D
然后,如果我使用Range("A1").TextToColumns Comma:=True,Space:=False
,它仍会按 SPACES 分割!单元格A1为A
,单元格B1为B
,单元格C1为C,D
(?!)
当有多个空格时,为什么TextToColumns
会自动按空格分割,即使我明确地告诉它不要?这是一个已知的错误?
有没有解决方法,除了自己手动将字符串解析为列?
答案 0 :(得分:6)
您希望将DataType
显式设置为xlDelimited
,否则Excel会假设您的数据按固定宽度列排列,而Excel初始猜测这些列的宽度是空格所在的位置 - 忽略您在参数列表中选择的任何分隔符。
尝试以下操作,您会看到它会重现您的结果:
Range("A1").TextToColumns DataType:=xlFixedWidth
与省略DataType
参数的结果相同:
Range("A1").TextToColumns
请注意,Excel文档在这方面是错误的:它说xlDelimited
是默认值,但显然xlFixedWidth
是现实中的默认值。
所以,长话短说,你想要的是:
Range("A1").TextToColumns DataType:=xlDelimited, Comma:=True, Space:=False
编辑它看起来比Excel文档可能有点错误。这实际上闻起来像Excel-VBA中的一个错误。请参阅以下评论中的讨论。
答案 1 :(得分:1)
将ConsecutiveDelimiter
设为True
:
Range("A1").TextToColumns ,,,True,,,True,False