2011-06-06 520 views
1

問候大家,我在Excel中有2組積分(A組和B組),每組有大約1000個包含經緯度的條目。我想要做的是將A組與B組進行比較,並找出A組中的每個點,B組中的哪個點最接近。什麼是最簡單的方法在Excel中做到這一點?在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來設置範圍去下一個下來,我就不必往下鍵入每個單獨的一個一路範圍(「D1237:E1237」)?

+1

你的代碼幾乎是無用的混亂。 (對不起!)你爲什麼不告訴我們你作爲一個輸入的例子,以及你想要的結果。那我們可以幫忙。對於初學者:不,你不必輸入每個人到1237. – 2011-06-06 17:52:39

回答

2

您可以使用此公式找出差異的最小值,您可能需要創建自己的方式來確定緯度/經度差異(如UDF)。將這個公式中另一列,並拖累:

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

我想@Furlong只是問如何做一個循環! – 2011-06-06 17:48:39

+0

@Jean,這是他看起來已經得到的,我只是給他簡單的方法。 – 2011-06-06 17:56:09

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中執行此操作之前,您應該問問自己(並告訴我們)如何在一張紙上做到這一點。

0

關於經緯度的事情,您應該瞭解如何將lat/long轉換爲虛假的東北或UTM座標。 This page可以幫助你解決這個問題,但是在西班牙語中,除了需要確定不同時區或地球半球之間的距離的問題之外,還有其他問題。

關於編程部分和自由宏觀幾乎解決辦法是:

(在UTM座標承擔一切,在相同的時區和同一半球)

  • 儲備3個細胞對以下數據:

ID_Point_in_GroupA

NORTH_of_ID

EAST_of_ID

  • NORTH_ID和EAST_ID可以determinated加入基於在ID_Point_in_GroupA一個「索引」功能。
  • 計算組B中每個點的畢達哥拉斯距離爲NORTH_ID和EAST_ID
  • 確定衣櫥。
  • 確定最近點的ID(「匹配」函數將有所幫助)。
  • 宏的循環遍歷gropu A中的所有ID_Point_in_GroupA並存儲結果。

問候

-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

+1

歡迎來到StackOverflow!感謝您的意見,但是您能否詳細說明這是如何工作的?這會讓你的回答更有幫助。 – 2016-03-22 16:43:40

相關問題