7
« en: 09 de Junio 2014, 23:17 »
Hola estoy haciendo un programa en VBA en Excel y me falta solo un elemento para incluir en la función.
El programa debe de sumar la distancia entre dos puntos y sumarla si cumple ciertas condiciones, esto parte de una lista de puntos, donde si es el mismo punto la distancia es cero, asi sucesivamente hasta completar todos los puntos, ahorita tengo un código que empece pero me marca un error, creo que no estoy tan perdido, envío el codigo:
'Función para Calcular Inversa de la Distancia al Cuadrado (1/D)^n un punto cumpliendo condiciones
Function SUMWS(Po, Pfs As Range, x As Integer, y As Integer, n As Integer, Fecha As Date) As Double 'Pfs es la variable que recibe el rango de puntos a evaluar
'Esta función SUMA las W si cumple ciertas Condiciones (Fecha, Valor<>"", Po<>Pfs)
Dim DIST, W, Xo, Yo, Xf, Yf As Double
Dim COND As Double 'Integer
If Pfs = Po Then
CW = Empty
Else
Z = Pfs.EntireRow.Count
SUMWS = Null
For Each Pf In Pfs
' Condiciones de Fechas Iguales, Valor Diferente de Vacío y Diferentes Puntos (Fecha, Valor<>"", Po<>Pfs)
COND = Application.WorksheetFunction.CountIfs(Worksheets("Registro").Range("B:B"), _
Fecha, Worksheets("Registro").Range("A:A"), Pf, Worksheets("Registro").Range("C:C"), ">0")
Xo = Application.WorksheetFunction.VLOOKUP(Po, Worksheets("Est Aled").Range("B:K"), x, False) 'Busca Xo
Xf = Application.WorksheetFunction.VLOOKUP(Pf, Worksheets("Est Aled").Range("B:K"), x, False) 'Busca Xf
DistX = (Xo - Xf) ^ 2 'Calcula Binomio Cuadrado de X
Yo = Application.WorksheetFunction.VLOOKUP(Po, Worksheets("Est Aled").Range("B:K"), y, False) 'Busca Yo
Yf = Application.WorksheetFunction.VLOOKUP(Pf, Worksheets("Est Aled").Range("B:K"), y, False) 'Busca Yf
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
' Sumatoria de la función inversa de la distancia elevado a la n (1/D)^n
CW = COND * W 'Si cumple las condiciones COND = 1, si no COND = 0 y se multiplica por la función W
SUMCW = CW + Pf
Next Pf
SUMWS = CW
End If
End Function
Gracias y espero su ayuda, tambien envio erchivo en Excel