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)
当我需要按照上面的显示输出
时,这会在列中垂直向下输出数据答案 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中对此操作进行编程,请在录制宏时手动运行该操作,然后检查并编辑宏。