excel - VBA - 创建 n × m 矩阵的函数

标签 excel vba matrix

我目前正在使用数组和循环,并尝试编写一个函数,该函数将输出一个 n × m 数组(矩阵),其中数字为 {1, 2, 3, ... , n*m}

我正在尝试学习一些基本的 VBA 代码,这纯粹是为了教育目的。

这是我想出的:

Function createMatrix(n, m)    
Dim matrix(1 To n, 1 To m) As Integer    
x = 1    
For i = 1 To n
    For j = 1 To m        
        matrix(i, j) = x            
        x = (x + 1)            
    Next j
Next i   
createMatrix = matrix    
End Function

它返回#VALUE。我不明白为什么。

我让它在某一时刻工作(创建一个 3x3 矩阵),方法是使其成为一个不带任何变量的函数,然后通过

初始化矩阵数组
Dim matrix(1 to 3, 1 to 3) As Integer

将 for 循环中的 nm 替换为 3s。

所以我猜测变量 nm 导致了问题,但不知道为什么。

最佳答案

数组声明必须是静态的(其中边界由硬编码值定义);但是您可以使用 ReDim 语句动态调整它们的大小。

' Declare an array.
' If you want to size it based on variables, do NOT define bounds.
Dim matrix() As Integer
' Resize dynamically.
ReDim maxtrix(n, m)

请注意,当您ReDim时,所有值都将丢失。如果您想保留 matrix 中的值,则可以添加 Preserve 关键字:

ReDim Preserve matrix(n, m) ' Keep any existing values in their respective indexes.

关于excel - VBA - 创建 n × m 矩阵的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27788623/

相关文章:

vba - 从具有完全访问权限的 VBA 运行 SAS

Excel VBA 单元格中的换行符会减慢合并任务的执行速度

arrays - 在matlab中设置稀疏矩阵的最快方法

c# - 在 .Net 中的 Excel 文档中查找最右边的单元格

c# - 从 Excel 读取的随机日期格式

arrays - 为什么 Join() 需要一个 1-dim Long 数组的双重转置?

python - 添加矩阵时出错

c++ - 在这个 C++ 函数中更新 Fortran 中的两个数组

excel - Excel 中大数的十进制到二进制转换

vba - 工作簿名称何时需要扩展名?