将值关联到不同的列表中

我有一个3300个名字和地址的列表。 唯一的名字只有300.为了对它们进行地理编码,我search了唯一的地址,获得每个地址的坐标。

现在我在两个MS excel表单中有两个列表,我想把每个名字与他的地址的坐标关联起来。

i.imgur.com/hmaLgCD.png

我build议将LatitudeLongitude列添加到您的蓝色表格,而不是创build一个绿色的。

使用以下公式:

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

这是一个VBA版本,它允许您灵活地(1)为您的工作表名称和您的起始数据的位置进行自定义,以及(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 

最后, 这篇文章是相当不错的阅读,它certificate了使用循环来迭代数组。