1

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)

但是,当我需要像上面显示的那样输出数据时,这会垂直向下输出数据

4

2 回答 2

1

您正在调整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

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

于 2014-07-23T02:36:10.723 回答
0

选择包含 CSV 值的列(在您的示例中显示为 A 列),然后从Data Ribbon Data Tools 组中启动 **Text to Columns 向导。指定用逗号分隔的列作为分隔符,然后观看向导执行此操作。

为了在 VBA 中编写此操作,请在录制宏时手动运行它,然后检查和编辑宏。

于 2014-07-23T02:36:10.350 回答