Excel:将最接近的匹配行数返回两个值

时间:2019-02-19 10:48:04

标签: arrays indexing excel-formula match vlookup

我有两个需要匹配的坐标列表。

一个非常大的列表(434,561行),其结构如下(将Excel中的列视为A,B和C):

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
[...]

我尝试分别匹配纬度和经度。以下公式给出了包含最接近的long值的单元格中的值:

=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 :(得分:0)

编辑:根据您的评论,这是修改后的公式。

假定较长的列表在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