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

VBA - Copying Some rows (of one column) from a 2-D array to a particular column of another array

提问人:Saugata 提问时间:9/28/2022 最后编辑:braXSaugata 更新时间:9/29/2022 访问量:59

问:

我被困住了。我正在尝试将一些选定的行从二维数组的一列复制到另一个二维数组的特定列。我已经尝试了我所有的知识,但无济于事。

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))

当我使用vaOut = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))

但是,一旦我尝试将结果放在 out 数组的第 2 列中,.我收到应用程序定义或对象定义错误Application.Index(vaOut, , 2) = Application.Transpose(Application.Index(varArray, Array(2, 3, 5, 6), 2))

非常感谢任何帮助。

数组 Excel VBA 多维数组 切片

评论

1赞 Tim Williams 9/29/2022
解决这个问题的最佳方法是使用循环来执行传输,而不是索引/转置

答:

1赞 T.M. 9/29/2022 #1

Application.Index(vaOut, , 2) = .. - 非常感谢任何帮助

    1. ReDim varOut & ReDim vaOut被任何最终的 DataField 分配否决。
    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 值输入到相同或另一个数组列中, 这根本不可能一蹴而就 结构类似于(尽管类似于
您之前的目标范围代码) - 您必须按照@TimWilliams建议循环(例如通过 newArr 并将值输入到另一个预定义的数组)。
Application.Index(vaOut, , 2) = ..

评论

0赞 Saugata 9/29/2022
非常感谢您的解释。我还怀疑切片数组并使用它来填充另一个数组的列是不可能的,尽管我不确定为什么。我的问题是,该数组将有 100-200K 条记录和 20-40 列。我猜,遍历数组会导致性能问题;我的假设错了吗?
0赞 T.M. 9/30/2022
@Saugata a) 使用 VBA,您的解决方案将更加耗时,因为对于出色的数据集,索引重排过于复杂;此外,请注意,大小有限(~65k 或 2^16-1),似乎已针对 Office 64 和 .b) 老但好东西:数组Application.TransposeWorksheetFunction.Transpose