将逗号分隔的单元格分隔为列

时间:2014-07-23 02:21:19

标签: excel vba cell transpose delimited

Soo ive发现了很多类似的问题,但没有什么能真正适合我想做的事情,而且我有点卡住了。

基本上我要做的是有一个单元格(在本例中为A1),它有多个以逗号分隔的值(总是4个值),然后将它分成沿列的单独行。

示例

A1[10,9,8,6]

需要成为

a10[10], b10[9], c10[8], d10[6]

我正在使用的当前代码是:

Dim X As Variant
X = Split(Range("A1").Value, ",")              

Range("a10").Resize(UBound(X) - LBound(X) + 1).Value = Application.Transpose(X)

当我需要按照上面的显示输出

时,这会在列中垂直向下输出数据

2 个答案:

答案 0 :(得分:1)

您正在将Range("A10")的大小调整为<​​em>列范围。

Resize方法有两个参数,都是可选的:

.Resize(_rows_, _columns_)

您只提供了第一个参数,它将A10的大小调整为指定数量的。例如,Debug.Print Range("A10").Resize(10).Address应该为您提供:$A$10:$A$19,当您想要的是$A$10:$J$10时。

请改为:

Range("a10").Resize(1, UBound(X) - LBound(X) + 1).Value = X

此外,您正在删除对Application.Transpose的调用,因为该数组已经在一行中,您无需转置它(之前您必须将其转换为行,转换为< / em>一栏。)

即使你有Option Base 1,Split函数的结果也总是一个从0开始的数组。 所以你可以这样做:

Range("a10").Resize(1, UBound(X) + 1).Value = X

或者,省略第一个参数,但包含一个逗号,表示您只传递第二个参数:

Range("a10").Resize(, UBound(X) + 1).Value = X

Pieter建议的另一种方法是使用内置的Text-to-Columns功能记录(和修改)宏。我认为这不适用于您的情况,因为您从一行获取值并将它们放在另一行中。内置的文本到列只输出到相同的行,因此您创建的自定义拆分是可行的方法。

答案 1 :(得分:0)

选择包含CSV值的列(示例中显示的列A),然后从数据功能区数据工具组中启动** Text to Columns向导。指定以逗号分隔的列作为分隔符,并观察向导执行此操作。

要在VBA中对此操作进行编程,请在录制宏时手动运行该操作,然后检查并编辑宏。