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.
Trending News
¿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!!!
Lo que necesito es poder llamarla desde una hoja en Excel, no desde una Macro de VB.
1 Answer
- 1 decade agoFavorite 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.