gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:16:39 25 4
gpt4 key购买 nike

我正在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com