在Excel中,如何计算两组大点之间的距离?

问候大家,我在Excel中有2组积分(A组和B组),每组有大约1000个包含lat / long的条目。 我想要做的就是将A组与B组进行比较,并找出A组中每个点在B组中最接近的点。 什么是最简单的方法在Excel中做到这一点?

我开始研究的一个解决scheme是一个macros,它将对比两个点。

Sub distance() ' ' distance Macro ' ' Keyboard Shortcut: Ctrl+d ' Range("D4:E4").Select Selection.Copy Sheets("Analog Data").Select Range("F3:G3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D3:E3").Select Application.CutCopyMode = False Selection.Copy Sheets("Cluster 58").Select Range("FT4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D5:E5").Select Application.CutCopyMode = False Selection.Copy Sheets("Analog Data").Select Range("F3:G3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D3:E3").Select Application.CutCopyMode = False Selection.Copy Sheets("Cluster 58").Select Range("FT5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 

现在我怎么能告诉visual basic设置范围去下一个,所以我不必一直input到范围(“D1237:E1237”)?

您可以使用这个公式来找出差异的最小值,您可能需要创build自己的方式来确定纬度/经度差异(如UDF)。 把这个公式放在另一列,然后向下拖动:

 =SUMPRODUCT(ABS(MIN(A1-B:B))) 

您post正文内的问题(关于代码)与post标题中的问题完全不同。

现在我要回答前者的字面意思,这是一个非常糟糕的做事方式。 你在问这样的事情:

 Sub distance() Dim i As Long For i = 0 To 1236 Range("D4:E4").Offset(i, 0).Copy Sheets("Analog Data").Select Range("F3:G3").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Range("D3:E3").Offset(i, 0).Select Application.CutCopyMode = False Selection.Copy Sheets("Cluster 58").Select Range("FT4").Offset(i, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next i End Sub 

清理这个可怕的混乱有点导致这个单一的陈述,这与你的百万行代码做的事情完全一样:

  Sheets("Analog Data").Range("F3:G3").Resize(1237, 2).Value _ = Sheets("Cluster 58").Range("D4:E4").Resize(1237, 2).Value 

现在到了拉长的东西。 你知道,我认为,以(lat,long)给出度数,点(0,0)和(0,0.1)相距大约10 km,而点(90,-131)和(90,74 )相距0公里? 这是假设一个球形的地球。 假设一个更现实的数据,例如WGS84导致更复杂的距离计算。

在询问如何在Excel中执行此操作之前,您应该问问自己(并告诉我们)如何在一张纸上执行此操作。

关于经纬度的事情,您应该了解如何将lat / long转换为伪东北或UTM坐标。 这个页面可以帮助你解决这个问题,但是在西class牙语中,除了需要确定不同时区或地球半球之间的距离之外,还会出现一些附带问题。

关于编程部分和几乎没有macros观的解决scheme将是:

(假设UTM坐标中的所有内容以及同一时区和同一个半球)

  • 保留3个单元格以下数据:

ID_Point_in_GroupA

NORTH_of_ID

EAST_of_ID

  • 可以通过添加基于ID_Point_in_GroupA的“索引”函数确定NORTH_ID和EAST_ID。
  • 计算组B中每个点的毕达哥拉斯距离为NORTH_ID和EAST_ID
  • 确定衣柜。
  • 确定最近点的ID( “匹配”function将有所帮助)。
  • macros循环searchgropu A中的所有ID_Point_in_GroupA并存储结果。

问候

经过一番繁琐的search之后,我可以find最好的配方。

你可以直接复制这个excel和更新你的价值..

 Location-1 Latitude Longitude Location-2 Latitude Longitude Distance in Kilo Meters POI-1 40.634068 -73.941248 POI-2 41.634068 -73.941248 

=ACOS((COS((B2*PI()/180))*COS((E2*PI()/180))*COS((-1*(F2*PI()/180))-(-1*(C2*PI()/180))))+(SIN((B2*PI()/180))*SIN((E2*PI()/180))))*6371