Excel: вернуть номер строки ближайшего совпадения двум значениям - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть два списка с координатами, которым мне нужно соответствовать.

Один очень большой список (434 561 строка), структурированный так (рассмотрим столбцы как A, B и C в Excel):

code (ID) |  Latitude  |  Longitude
----------|------------|-----------
point455  |  4.513523  |  23.754457
point478  |  74.123523 |  83.757459
[...]

Второй список (4000 строк) другого набора точек с такой же структурой.

Я хочу сопоставить каждую точку второго списка с ближайшими, скоординированными в первом.Примерно так:

(second list)
code (ID) |  Latitude  |  Longitude  |  Closest point
----------|------------|-------------|--------------
tag165    |  4.513523  |  23.754457  |  point488
tag198    |  74.123523 |  83.757459  |  point124
[...]

Я попытался сопоставить широту и долготу отдельно.Следующая формула дает значение в ячейке, которая содержит ближайшее длинное значение:

=INDEX(ALLStops!B2:ALLStops!$B$434561, MATCH(MIN(ABS(ALLStops!$B$2:ALLStops!$B$434561-B2)), ABS(ALLStops!B2:ALLStops!$B$434561-B2), 0))

Оба столбца имеют одинаковую формулу и обрабатываются независимо.Затем я использую =MATCH(E2,ALLStops!B2:B434561,0), чтобы получить строку.

Но около 1/3 записей имеют значения, в которых самые близкие координаты находятся в разных строках, что, очевидно, бесполезно.

Итак, двазначения координат, которые совпадают как самые близкие, должны быть в той же строке , и я предполагаю, что вычисление должно быть сжато в одно.

Может кто-нибудь предложить способ ограничения этого или более аккуратный, (и менее ресурсоемкий) метод?

1 Ответ

0 голосов
/ 19 февраля 2019

Редактировать: согласно вашему комментарию, вот измененная формула.

Предполагая, что более длинный список доступен в столбцах A, B и C, а более короткий список - от F до I, вы можете использовать эту формулу для получения кода наибольшего совпадения из большого списка с точками в коротком списке.

=INDEX(A$2:A$434562,SUMPRODUCT((MIN(SQRT(($B$2:$B$434562-G2)^2+($C$2:$C$434562-H2)^2))=SQRT(($B$2:$B$434562-G2)^2+($C$2:$C$434562-H2)^2))*ROW($A$1:$A$434561)))

... выполнить с помощью Ctrl + Shift + Enter.Надеюсь, это поможет

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...