如何从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中的数组中获取一维向量的主要内容,如果未能解决你的问题,请参考以下文章