VBA - 用于创建n乘m矩阵的函数

时间:2015-01-05 21:59:27

标签: excel vba matrix

我目前正在处理数组和循环,我正在尝试编写一个函数,它将输出一个数字为{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循环中的nm

所以我猜变量nm会导致问题,但不知道原因。

2 个答案:

答案 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