2015-02-08 76 views
1

我有一個包含3300個名稱和地址的列表。唯一的名字只有300.爲了對它們進行地理編碼,我搜索了唯一的地址,獲得每個地址的座標。不同列表中的相關值

現在我有兩個MS excel表單中的這兩個列表,並且我想將每個名稱與他的地址的座標關聯起來。

i.imgur.com/hmaLgCD.png

回答

0

我建議加入LatitudeLongitude列到你的藍表,而不是創建綠色之一。

使用下列公式:

=INDEX(Latitude_orange_column, MATCH(address1_blue_cell, Address_orange_column, 0)) 
=INDEX(Longitude_orange_column, MATCH(address1_blue_cell, Address_orange_column, 0)) 
+0

哇!它完美的工作!非常感謝! – 2015-02-08 23:15:29

0

這是VBA版本,它允許您靈活地(1)自定義您的工作表名稱和您的起始數據位置(S)和(2)把你的'結果'放入任何起始單元格位置的任何表單中。

本質上,代碼將數據放入數組中,處理數據並將結果放入第三個數組中。然後可以很容易地將這個「結果」數組傳送到指定工作表上的指定範圍。

注意:請在您的數據副本上運行該代碼,因爲它會刪除姓名數據中的重複項。

Option Explicit 
Sub AssocLocs() 
Dim wsName As Worksheet, wsLocn As Worksheet, wsRes As Worksheet 
Dim nmeRng As Range, locnRng As Range 
Dim nmeStRow As Long, nmeEndRow As Long, nmeCol As Long 
Dim locnStRow As Long, locnEndRow As Long, locnCol As Long 
Dim resStRow As Long, resCol As Long 
Dim N As Long, L As Long, e As Long 
Dim nmeArr(), locnArr(), resArr() 

'Setup====================================== 
    'worksheets 
    Set wsName = Sheets("Sheet1") 'name data 
    Set wsLocn = Sheets("Sheet2") 'location data 
    Set wsRes = Sheets("Sheet1") 'results 
    'original data (x2) cell start positions 
    nmeStRow = 2 'header row 
    nmeCol = 2 
    locnStRow = 2 'header row 
    locnCol = 2 
    'result destination cell start position 
    resStRow = 2 
    resCol = 6 
'=========================================== 

    'unique name data into array 
    With wsName 
     nmeEndRow = .Cells(Rows.Count, nmeCol).End(xlUp).Row 
     Set nmeRng = .Range(.Cells(nmeStRow + 1, nmeCol), .Cells(nmeEndRow, nmeCol + 1)) 
     nmeRng.Sort Key1:=.Range("B3"), Order1:=xlAscending, Header:=xlYes 
     nmeRng.RemoveDuplicates Columns:=1 ', Header:=xlYes 
     nmeEndRow = .Cells(Rows.Count, nmeCol).End(xlUp).Row 
     Set nmeRng = .Range(.Cells(nmeStRow + 1, nmeCol), .Cells(nmeEndRow, nmeCol + 1)) 
     nmeArr() = nmeRng.Value 
    End With 

    'sorted location data into array 
    With wsLocn 
     locnEndRow = .Cells(Rows.Count, locnCol).End(xlUp).Row 
     Set locnRng = .Range(.Cells(locnStRow, locnCol), .Cells(locnEndRow, locnCol + 2)) 
     locnRng.Sort Key1:=.Range("B3"), Order1:=xlAscending, Header:=xlYes 
     locnArr() = locnRng.Value 
    End With 

e = -1 

    For N = LBound(nmeArr()) To UBound(nmeArr()) 
     For L = LBound(locnArr()) To UBound(locnArr()) 
      If nmeArr(N, 2) = locnArr(L, 1) Then 
       e = e + 1 
       ReDim Preserve resArr(4, e) 
       resArr(0, e) = nmeArr(N, 1) 
       resArr(1, e) = nmeArr(N, 2) 
       resArr(2, e) = locnArr(L, 2) 
       resArr(3, e) = locnArr(L, 3) 
       Exit For 
      End If 
     Next L 
    Next N 

    With wsRes 
     .Range(.Cells(resStRow, resCol), .Cells(resStRow + UBound(resArr, 2), resCol + 4)) = Application.Transpose(resArr) 
    End With 

End Sub 

最後,this article相當其維護了使用循環遍歷數組一個良好的閱讀。

+0

謝謝你的建議,barryleajio。順便說一句,我發現Aprillion的方法更適合我的問題。 – 2015-02-08 23:20:53

+0

這太好了 - 很高興你能排序,並感謝你的禮貌和反饋。 – barryleajo 2015-02-09 07:11:43

相關問題