如何从vba中的数组中获取一维向量

Posted

技术标签:

【中文标题】如何从vba中的数组中获取一维向量【英文标题】:how to get one dimensional vector from an array in vba 【发布时间】:2017-02-19 22:31:48 【问题描述】:

有谁知道如何从 VBA 中的一列数组中获取真正的向量? 我已经完成了以下步骤:

'' read one column from 2D array
Dim ixy()
ixy = Application.Index(ts.Vertices, , 1)

一切看起来都很好,直到我想重新调整向量并在最后添加一个值:

ReDim Preserve ixy(LBound(ixy) To UBound(ixy) + 1, 1 To 1)
ixy(UBound(ixy)) = ts.Vertices(1, 1)

这根本行不通,因为我无法重新调整数组的非最后一个维度。那么如何通过从数组中读取一列来获取向量呢?在 Locals 窗口中,变量 ixy 看起来 + : ixy : : Variant(1 to 32, 1 to 1) 所以它不是一维数组。

我知道如何通过循环来遵守这一点,但只想用最少的代码找到明确的解决方案。有什么建议吗?

【问题讨论】:

我想要的是transpose。第一个ixy = Application.Index(ts.Vertices, , 1) 保持不变,只需要转置即可。多么简单的解决方案! ixy = Application.Transpose(ixy)非常感谢这个建议! 我把参数关掉了,但是如果我没记错的话,Transpose 返回二维数组,而 Index( , 0) 一维数组 对我来说,第一个为零的解决方案不起作用。但第二个很棒。如果重要,我会使用 Excel 2016,64 位。 【参考方案1】:

来自INDEX function 备注部分:

如果将 Row_num 或 Column_num 设置为 0(零),INDEX 将分别返回整列或整行的值数组。

ixy = Application.Index(ts.Vertices, 0, 1)

ixy = Application.Transpose(ts.Vertices)

【讨论】:

ixy = Application.Transpose(ixy) 有效,因为ixy = Application.Transpose(ts.Vertices) 转置了整个二维数组。第一个应该保持不变:ixy = Application.Index(ts.Vertices, , 1)(不为零)

以上是关于如何从vba中的数组中获取一维向量的主要内容,如果未能解决你的问题,请参考以下文章

如何从 VBA 中的两个数组函数获取单个数组输出?

如何从二维数组中获取一维列数组和一维行数组? (C#.NET)

如何从 PySpark 中的向量结构中获取项目

如何将二维数组的一维分配给VBA中的新一维数组

Java中如何获取一维数组最小值

如何获取二维数组的列数