问候每个人,我在Excel中有两组点(A组和B组),每组有大约1000个包含lat / long的条目。我想要做的是将A组与B组进行比较,并找出A组中每个点B组中最接近的点。在excel中最简单的方法是什么?
我开始研究的一个解决方案是将两个点相互比较的宏。
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设置范围以转到下一个范围,这样我就不必将每个个体一直打到Range(“D1237:E1237”)?
答案 0 :(得分:2)
您可以使用此公式查找差异的最小值,您可能需要创建自己的方法来确定纬度/经度的差异(如UDF)。将此公式放在另一列中,然后向下拖动:
=SUMPRODUCT(ABS(MIN(A1-B:B)))
答案 1 :(得分:1)
帖子正文中的问题(关于代码)与帖子标题中的问题完全不同。
现在我将非常直接地回答前者,但需要注意的是,这是一种非常糟糕的做事方式。你要的是这样的东西:
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
现在进入长期的事情。你知道,我认为,以度数给出的(纬度,长度),点(0,0)和(0,0.1)相距约10公里,而点(90,-131)和(90,74) )正好相距0公里?这是假设球形地球。假设一个更真实的数据,例如WGS84会导致更复杂的距离计算。
在询问如何在Excel中执行此操作之前,您应该问自己(并告诉我们)如何在一张纸上执行此操作。
答案 2 :(得分:0)
关于lat-long事项,您应该了解如何将lat / long转换为false east-east或UTM坐标。 This page可以帮助你解决这个问题,但是如果你需要确定不同时区或地球半球之间的距离,那么就会产生西班牙语问题。
关于编程部分和几乎无宏的解决方案将是:
(假设UTM坐标中的所有内容以及相同的时区和相同的半球)
ID_Point_in_GroupA
NORTH_of_ID
EAST_of_ID
此致
答案 3 :(得分:-1)
经过一些乏味的搜索后,这是我能提出的最好的公式..
您可以将其直接复制到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