lunes, 16 de noviembre de 2009

Pasar matrices a una función

Pasar matrices a una función en programación de macros para Excel es de lo que nos vamos a ocupar en este Post. También veremos el caso en el que la función devuelve una matriz. Disponemos de un procedimiento (Sub) que llama a una función (Function), la cual devuelve o bien un valor, o bien una matriz.
Primer caso
La función recibe una matriz y devuelve un único valor.
Código:
Sub principal()
Dim A(2)
A(1) = 1
A(2) = 2
MsgBox sumatorio(A)
End Sub

Private Function sumatorio(B)
Dim s
s = B(1) + B(2)
sumatorio = s
End Function
Segundo caso
La función no recibe nada y devuelve una matriz.
Es importante definir la función Genera escribiendo el tipo y unos paréntesis detras del tipo de variable:
Function Genera() As Byte()
Estos últimos paréntesis son imprescindibles.
Código:
Sub Ejecuta()
Dim Z() As Byte
Z = Genera()
MsgBox (Z(1) & ", " & Z(2))
End Sub

Private Function Genera() As Byte()
Dim A(2) As Byte
A(1) = 1: A(2) = 2
Genera = A
End Function
Otro ejemplo que se ajustaría a este segundo caso se da cuando se pide a la matriz que genere ciertos números aleatorios. Por ejemplo, la función podría generar números aleatorios sin repetición en cierto rango de valores enteros.
Tercer caso
La función recibe una matriz y devuelve otra matriz.
Código:
Sub Transforma()
Dim Z() As Byte
Dim p, q
p = 4: q = 5
Z = Dobla(p, q)
MsgBox (Z(1) & ", " & Z(2))
End Sub

Private Function Dobla(x, y) As Byte()
Dim A(2) As Byte
A(1) = x * 2
A(2) = y * 2
Dobla = A
End Function