我目前正在处理数组和循环,我正在尝试编写一个函数,它将输出一个数字为{1,2,3,...,n * m}的n×m数组(矩阵)< / p>
我正在尝试学习一些基本的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
用fors替换for循环中的n
和m
。
所以我猜变量n
和m
会导致问题,但不知道原因。
答案 0 :(得分:5)
数组声明必须是静态的(其中边界由硬编码值定义);但是您可以使用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.
答案 1 :(得分:4)
首先需要将数组声明为动态数组,然后将其重新设置为维度。
Function createMatrix(n, m)
Dim matrix() As Integer
ReDim 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