Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

¿Cómo hacer una función que retorne un vector en Visual Basic?

Estoy haciendo una función que obtenga el promedio movil de un vector de tamaño "Tam", considerando "N" retrasos, y no sé cómo hacer que la función retorne como salida el vector con el resultado. El código que llevo hecho es el siguiente:

Public Function PromMovil(X, N)

' PromMovil(X, N) genera una variable con la media movil

' del vector columna X para N retrasos

Dim Tam, Count, jota, cumul, ret, ind, Salida()

Application.Volatile

Tam = X.Rows.Count

For Count = 1 To Tam

If Count < N Then

For jota = 1 To N

ind = Count - jota + 1

If ind < 0 Then

ret = 0

Else

ret = X(ind)

End If

cumul = cumul + ret

Next jota

Salida(Count) = cumul / N

Else

For jota = 1 To N

cumul = cumul + X(Count - jota + 1)

Next jota

Salida(Count) = cumul / N

End If

Next Count

PromMovil = Salida

End Function

Doy 10 ptos a la 1era respuesta Correcta!!!

Muchas Gracias!!!

Update:

Lo que necesito es poder llamarla desde una hoja en Excel, no desde una Macro de VB.

1 Answer

Rating
  • 1 decade ago
    Favorite Answer

    Amigo, deberías trabajar indicando los tipos de cada variable. Pero bueno vamos a lo nuestro. Según lo que entendí quieres que tu función devuelva un vector. Para ello vamos a trabajar con vectores dinámicos ya que no es posible hacerlo con vectores estáticos o de dimensión fija.

    Declaremos la función de la siguiente manera suponiendo que los vectores sean de enteros. Puedes cambiar el tipo de dato a tu conveniencia.

    ‘La función PromMovil genera una variable con la media movil

    ' del vector columna X para N retrasos

    Public Function PromMovil( byref X() as integer, byval N as integer) as integer()

    Dim Tam as integer, Count as integer, jota as integer, cumul as integer, retas integer, ind as integer

    Dim Salida() as integer

    Application.Volatile

    Tam = X.Rows.Count

    Redim Salida( 1 to Tam)

    For Count = 1 To Tam

    If Count < N Then

    For jota = 1 To N

    ind = Count - jota + 1

    If ind < 0 Then

    ret = 0

    Else

    ret = X(ind)

    End If

    cumul = cumul + ret

    Next jota

    Salida(Count) = cumul / N

    Else

    For jota = 1 To N

    cumul = cumul + X(Count - jota + 1)

    Next jota

    Salida(Count) = cumul / N

    End If

    Next Count

    PromMovil = Salida

    End Function

    Para llamar a esta función debes hacer::

    Dim X(1 To 10) As Integer

    Dim N As Integer, i as integer

    Dim Salida() As Integer

    Salida = PromMovil(X, N)

    For i = lbound(salida) to ubound(salida)

    Debug.print salida(i)

    Next i

    Nota: No revisé el código de tu función, solo me dediqué a indicarte como pasar un vector en el nombre de la función. Espero que esto te sirva.

Still have questions? Get your answers by asking now.