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

1 comentario:

  1. No entendí nada :(

    Yo tengo una matriz en una planilla, y en otra planilla tengo 2 listados... ¿qué fórmula tengo que aplicar para que a partir de la info en el listado 1 y en el listado 2, me dé el valor correspondiente en la matriz?

    ¡Gracias!

    ResponderEliminar