如何在Excel 365中根据经纬度查找前3个最近地点
解决Excel 365中提取前3个最近地点的问题
针对你需要从Sheet2中找出Sheet1每个地点对应的前3个最近地点的需求,之前的LOOKUP公式仅能返回单个结果,你可以利用Excel 365的动态数组函数实现批量提取,以下是两种实用方案:
方案1:将前3个地点合并为逗号分隔文本(单单元格输出)
在Sheet1的D2单元格输入以下公式,公式会自动向下溢出到所有行:
=BYROW(B2:C10,LAMBDA(x,TEXTJOIN(", ",TRUE,INDEX(Sheet2!A$2:A$5,SORTBY(SEQUENCE(ROWS(Sheet2!A$2:A$5)),MMULT((Sheet2!B$2:C$5-x)^2,{1;1}),1),SEQUENCE(3)))))
公式说明:
BYROW(B2:C10,LAMBDA(x,...)):遍历Sheet1中每一行的坐标数据MMULT((Sheet2!B$2:C$5-x)^2,{1;1}):计算当前地点与Sheet2所有地点的坐标差平方和(无需开根号,排序结果和实际距离一致)SORTBY(...):按距离平方从小到大排序Sheet2地点的行号INDEX(..., SEQUENCE(3)):提取排序后的前3个地点名称,用TEXTJOIN合并为文本
方案2:将前3个地点分别放在不同单元格(多列输出)
在Sheet1的D2单元格输入以下公式,向右拖动到F2,再向下拖动到所有行(Excel 365中直接输入后会自动溢出):
=INDEX(Sheet2!A$2:A$5,SORTBY(SEQUENCE(ROWS(Sheet2!A$2:A$5)),MMULT((Sheet2!B$2:C$5-B2:C2)^2,{1;1}),1),COLUMN(A1))
公式说明:
COLUMN(A1):随着单元格向右拖动,依次取排序后的第1、2、3个结果- 其余部分逻辑和方案1一致,只是将合并文本改为单独提取每个地点
注意事项
- 请根据你的实际数据范围,调整公式中的
Sheet2!A$2:A$5、Sheet2!B$2:C$5以及Sheet1!B2:C10区域 - 确保你的Excel版本支持动态数组函数(Excel 365或2021及以上)
内容的提问来源于stack exchange,提问作者arnold_p
相关产品推荐
相关产品推荐

