excel - 如何在 Excel 2007 VBA 中 "ReDim Preserve"二维数组,以便我可以向数组添加行而不是列?

标签 excel vba

我正在 Excel VBA 中使用动态数组。列数(m)是固定的,但是,我不知道需要多少行(n)。

帮助文档指出 ReDim Preserve myArray(n, m) 允许我使 m 变大,但不能使 n 变大。但是,我需要在保留数据的同时增加行数 (n),而不是列数 (m)!

例如,我可能有一个 (5,20) 数组,我想在保留数据的同时将其扩展为 (10,20)。

看来,如果有某种方法可以转置我的数组,执行 ReDim Preserve 来扩展“列”的数量,然后重新转置我的数组,我就可以完成我想要的。

这是正确的方法吗?如果是这样,我该怎么做?

有更好的方法来实现我想要的吗?

最佳答案

实现您想要的操作的一种方法是使用包含一维数组的一维数组而不是二维数组。然后你可以 ReDim 保留你想要的外部数组。如果您从函数返回外部数组,Excel 将执行正确的操作并将其强制为二维数组。

例如,下面的函数将向调用它的单元格返回一个 3x2 数组:

Public Function nested()
    Dim outer
    outer = Array(Array(1, 2), Array(3, 4))

    ReDim Preserve outer(1 To 3)

    outer(3) = Array(5, 6)

    nested = outer
End Function

我对这些问题的回答可能对您也有用:Pass multidimensional array into Excel UDF in VBAVBA pasting 3 dimensional array into sheet

当然,如果您不从 UDF 返回此值,则必须自己强制执行它。无需编写循环代码即可实现此目的的一种简单方法是:

Dim coerced
coerced = Application.Index(outer, 0, 0)

这只是调用 Excel 的内置 INDEX 函数,零意味着您想要返回所有行和所有列。 Excel 会自动将一维数组的一维数组强制转换为二维数组。 (警告:有一些尺寸限制,但它们比 10x20 大得多。)

关于excel - 如何在 Excel 2007 VBA 中 "ReDim Preserve"二维数组,以便我可以向数组添加行而不是列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992717/

相关文章:

excel - Excel 中多少列(安全)算太多?

vba - 如何在打印Word文档时隐藏ActiveX命令按钮?

vba - 合并多个 CSV 文件

Excel VBA根据选择选择多个单元格

vb.net - VB 和 VBA 的优缺点?

vba - 如何将路径从 "specialfolders(16)"更改为 C 盘上的 XYZ 文件夹?

python - 如何使用 Python 读取包含扩展字体的 Excel 文件? (openpyxl 错误 : Max value is 14)

vba - 使用 VBA 的单元格交叉引用

java - 使用 Apache poi 使​​用 java 从 Excel 获取数据

vba - 在 Excel 中自动复制和粘贴特定范围的最佳方法是什么?