VBA-将(一列的)某些行从二维数组复制到另一个数组的特定列



我被卡住了。我正在尝试将一些选定的行从二维数组的一列复制到另一个二维数组的特定列。我尽了全力,但没有用。

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) = ..-如有任何帮助,我们将不胜感激

    1. ReDim varOut&ReDim vaOut被任何最终的数据字段分配否决
    1. 如果您想坚持使用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
    1. Application.Index([G9:I12], , 2) = ..不构建虚拟阵列,它仅描述了接收目标范围,其简单地为H9:H12

主要问题

但是,如果要将newArr值输入到同一个或另一个数组列,这根本不可能一次完成像
Application.Index(vaOut, , 2) = ..这样的构造(尽管重新编译到您以前的目标范围代码(-您必须按照@TimWilliams的建议进行循环(例如,通过newArr并将值输入到另一个预定义数组(。

最新更新