Я ломал голову, пытаясь понять, как вложить функцию внутри цикла for each, чтобы запустить ту же проверку для каждого результата и добавить ее в список, если она соответствует критериям.
поэтому базовая функция, которую я использую, захватывает 2 lat/long и получает расстояние в км между ними. Перечисленные ниже:
Public Function getDistance(latitude1,longitude1,latitude2,longitude2)
earth_radius = 6371
Pi = 3.14159265
deg2rad = Pi / 180
dLat = deg2rad * (latitude2 - latitude1)
dLon = deg2rad * (longitude2 - longitude1)
a = Sin(dLat / 2) * Sin(dLat / 2) + Cos(deg2rad * latitude1) * Cos(deg2rad * latitude2) * Sin(dLon / 2) * Sin(dLon / 2)
c = 2 * WorksheetFunction.Asin(Sqr(a))
d = earth_radius * c
getDistance = d
End Function
Итак, что я хочу сделать, это запустить его на два списка локаций и сделать цикл for, где, в псевдокоде, это будет: для каждого местоположения в списке A; создайте список каждого местоположения в пределах 5 км (результат getDistance).
у меня есть второй блок кода от extendoffice, который, кажется, близко, как это мульти параметр vlookup перечисленных ниже:
Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)
'Update 20150310
Dim rng As Range
Dim xResult As String
xResult = ""
For Each rng In pWorkRng
If rng = pValue Then
xResult = xResult & " " & rng.Offset(0, pIndex - 1)
End If
Next
MYVLOOKUP = xResult
End Function
Я не могу показаться на всю жизнь мне гнезда, что функция внутри vlookup цикла я знаю, что я должен вызвать в функции get distance внутри для каждого цикла, но я думаю, что это, возможно, потребуется вложенный цикл внутри, что для петля.
Я полностью здесь с моим мышлением? Я довольно новичок в VBA, поэтому у меня действительно возникают проблемы с синтаксисом этого двойного вложенного цикла...
обновление:
Так что я думаю, я получил немного дальше с тем, что мне нужно. Я не думаю, что я попытаюсь сравнить два диапазона, а просто приведу широту и долготу переменной поиска в функцию. Так вот где я получил картину того, что я пытаюсь для достижения:
таблица СНиП со столбцами и результатами я пытаюсь достичь
фактический код двух функций, запрос географического расстояния, указанный ранее, и функция, которую я пытался создать:
Public Function getDistance(latitude1, longitude1, latitude2, longitude2)
earth_radius = 6371
Pi = 3.14159265
deg2rad = Pi / 180
dLat = deg2rad * (latitude2 - latitude1)
dLon = deg2rad * (longitude2 - longitude1)
a = Sin(dLat / 2) * Sin(dLat / 2) + Cos(deg2rad * latitude1) * Cos(deg2rad * latitude2) * Sin(dLon / 2) * Sin(dLon / 2)
c = 2 * WorksheetFunction.Asin(Sqr(a))
d = earth_radius * c
getDistance = d
End Function
Function findCloseStores(basesitelat As Double, basesitelong As Double, storeRange As Range)
Dim xResult As String
xResult = ""
Dim rw As Range
Dim worker As Double
For Each rw In storeRange.Rows
worker = getDistance(basesitelat, storeRange.Cells(rw.Row, 2), basesitelong, storeRange.Cells(rw.Row, 3))
If worker <= 9.77 Then
xResult = xResult & "," & storeRange.Cells(rw.Row, 1)
End If
Next rw
findCloseStores = xResult
End Function
то, что я на самом деле получаю в результате, просто пусто. Это обработка функции я дал ему, но он не читает что-то правильно/я написал что-то не так в функции findCloseStores, что делает его считать параметры встреченный.
любая идея о том, что я делаю неправильно на findclosestores функции?