告诉Excel VBA TextToColumns不要用空格分割

时间:2011-11-30 18:50:16

标签: excel vba csv

我在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会自动按空格分割,即使我明确地告诉它不要?这是一个已知的错误? 有没有解决方法,除了自己手动将字符串解析为列?

2 个答案:

答案 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