将逗号分隔到列中

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

基本上我想要做的是有一个单元格(在这种情况下,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) 

这将输出垂直向下的数据列,当我需要它输出,如上所示

你正在调整Range("A10")到一个列的范围。

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的调用,因为该数组已经在一行中,您不需要转置它(以前必须将其从一行转移到一列)。

此外,Split函数的结果始终是基于0的数组,即使您拥有Option Base 1所以你可以简单地做:

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

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

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

Pieterbuild议的另一种方法是使用内置的Text-to-Columnsfunction来logging(和修改)一个macros。 我不认为这会适用于你的情况,因为你从一行取值并把它们放在另一行。 内置的文本到列仅输出到同一行,所以像你创build的自定义分裂是要走的路。

select包含CSV值的列(在您的示例中似乎是列A),然后从数据function区数据工具组启动**文本到列向导。 指定您的列以逗号作为分隔符,并注意向导执行此操作。

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