我被卡住了。我正在尝试将一些选定的行从二维数组的一列复制到另一个二维数组的特定列。我尽了全力,但没有用。
Sub TestIndxPst()
Dim varArray As Variant
ReDim varArray(1 To 4, 1 To 3)
Dim vaOut As Variant
ReDim vaOut(1 To 4, 1 To 3)
RowNumArray = Evaluate("transpose(Row(1" & ":" & 5 & "))")
varArray = ThisWorkbook.Worksheets("Sheet1").Range("G2:I7")
Application.Index([G9:I12], , 2) = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))
vaOut = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))
Application.Index(vaOut, , 2) = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))
For i = LBound(vaOut) To UBound(vaOut)
Debug.Print vaOut(i, 1)
Next i
End Sub
你可以看到,我可以在使用Application.Index([G9:I12], , 2) = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))
写入excel范围时做到这一点
当我使用vaOut = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))
将其输出到第一列时,我也可以这样做
但是,当我试图将结果放入数组的第2列时,Application.Index(vaOut, , 2) = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))
。我得到应用程序定义或对象定义错误
非常感谢您的帮助。
Application.Index(vaOut, , 2) = ..
-如有任何帮助,我们将不胜感激
-
ReDim varOut
&ReDim vaOut
被任何最终的数据字段分配否决
-
- 如果您想坚持使用
Index
函数,将重新排列的值写入目标范围,我更喜欢中间赋值类似于
- 如果您想坚持使用
Dim newArr
newArr = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))
然后是
Sheet1.Range("H9").Resize(Ubound(newArr),ubound(newArr,2)) = newArr
Application.Index([G9:I12], , 2) = ..
不构建虚拟阵列,它仅描述了接收目标范围,其简单地为H9:H12
主要问题
但是,如果要将newArr值输入到同一个或另一个数组列,这根本不可能一次完成像Application.Index(vaOut, , 2) = ..
这样的构造(尽管重新编译到您以前的目标范围代码(-您必须按照@TimWilliams的建议进行循环(例如,通过newArr并将值输入到另一个预定义数组(。