Создание цикла VBA для проверки результатов двух вложенных функций в диапазоне

Я ломал голову, пытаясь понять, как вложить функцию внутри цикла 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 функции?

2
задан Pewkie
12.11.2022 2:00 Количество просмотров материала 2441
Распечатать страницу

1 ответ

вы правы, что это вложенный цикл. В общих чертах это может выглядеть так: для каждого, для каждого B, если getdistance импортируется из A в B мало, то добавить в список, следующие б сохранить список, далее А.

0
отвечен scenography 2022-11-13 09:48

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх