15
« en: 10 de Junio 2014, 23:55 »
En el código no aparece nada solo aparece el error en la hoja de Excel #Valor! lo que me imagino es que en el código no están bien declaradas las variables.
Para la Inversa de la distancia (W) tengo un código aparte donde hace bien el calculo lo único que necesito es que haga el calculo para todos los puntos del rango, mando el código de W, DISTANCIA y PRECIP (P)
'Función para calcular Distancia entre puntos
Function DIST(Po, Pf, x As Integer, y As Integer) As Double
Dim Xo, Yo, Xf, Yf As Double
Xo = Application.WorksheetFunction.VLOOKUP(Po, Worksheets("Est Aled").Range("C:L"), x, False) 'Busca Xo
Yo = Application.WorksheetFunction.VLOOKUP(Po, Worksheets("Est Aled").Range("C:L"), y, False) 'Busca Yo
Xf = Application.WorksheetFunction.VLOOKUP(Pf, Worksheets("Est Aled").Range("C:L"), x, False) 'Busca Xf
Yf = Application.WorksheetFunction.VLOOKUP(Pf, Worksheets("Est Aled").Range("C:L"), y, False) 'Busca Yf
If Po = Pf Then 'Nunca calcula la Distancia para el mismo punto
DIST = Empty
Else: DistX = (Xo - Xf) ^ 2 'Calcula Binomio Cuadrado de X
DistY = (Yo - Yf) ^ 2 'Calcula Binomio Cuadrado de Y
DIST = (DistX + DistY) ^ (1 / 2) 'Calcula la distancia entre puntos
End If
End Function
'Función para Calcular Inversa de la Distancia al Cuadrado (1/D)^n entre puntos
Function W(Po, Pf, x As Integer, y As Integer, n As Integer) As Double
Dim DIST, Xo, Yo, Xf, Yf As Double
If Po = Pf Then
W = Empty
Else: Xo = Application.WorksheetFunction.VLOOKUP(Po, Worksheets("Est Aled").Range("C:L"), x, False) 'Busca Xo
Yo = Application.WorksheetFunction.VLOOKUP(Po, Worksheets("Est Aled").Range("C:L"), y, False) 'Busca Yo
Xf = Application.WorksheetFunction.VLOOKUP(Pf, Worksheets("Est Aled").Range("C:L"), x, False) 'Busca Xf
Yf = Application.WorksheetFunction.VLOOKUP(Pf, Worksheets("Est Aled").Range("C:L"), y, False) 'Busca Yf
DistX = (Xo - Xf) ^ 2 'Calcula Binomio Cuadrado de X
DistY = (Yo - Yf) ^ 2 'Calcula Binomio Cuadrado de Y
DIST = (DistX + DistY) ^ (1 / 2) 'Calcula la Distancia entre puntos
W = 1 / DIST ^ n 'Calcula la función Inversa de la Distancia elevado a la n (1/D)^n
End If
End Function
'Función de Precipitación
Function PRECIP(Po, Pfs, Fecha As Date) As Double
If Po = Pfs Then
PRECIP = Empty
Else: PRECIP = Application.WorksheetFunction.SUMIFS(Worksheets("Registro").Range("C:C"), Worksheets("Registro").Range("B:B"), Fecha, Worksheets("Registro").Range("A:A"), Pfs, Worksheets("Registro").Range("C:C"), ">0")
End If
End Function
Si te fijas, este código es para dos puntos uno por vez, tengo ΣPiWi listo para cada uno de los puntos solo me falta el ΣW para completar la ecuación lo que necesito es que haga todos los cálculos en una sola celda.