Excel 关联不同列表中的值
我有一份有3300个名字和地址的名单。唯一的名字只有300个。为了对它们进行地理编码,我只搜索了唯一的地址,获得了每个地址的坐标 现在,我在两张MS excel表格中列出了这两个列表,我想将每个姓名与他的地址坐标关联起来 我建议将纬度和经度列添加到蓝色表中,而不是创建绿色表 使用以下公式:Excel 关联不同列表中的值,excel,Excel,我有一份有3300个名字和地址的名单。唯一的名字只有300个。为了对它们进行地理编码,我只搜索了唯一的地址,获得了每个地址的坐标 现在,我在两张MS excel表格中列出了这两个列表,我想将每个姓名与他的地址坐标关联起来 我建议将纬度和经度列添加到蓝色表中,而不是创建绿色表 使用以下公式: =INDEX(Latitude_orange_column, MATCH(address1_blue_cell, Address_orange_column, 0)) =INDEX(Longitude_ora
=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将“结果”放在任何起始单元格位置的任何工作表中 本质上,代码将数据放入数组中,对其进行处理,并将结果放入第三个数组。然后,可以很容易地将此“结果”数组传输到指定工作表上的指定范围 注意:在数据的副本上运行代码,因为它会从数据中删除重复项
最后,这本书很好地证明了使用循环迭代数组是正确的。谢谢你的建议,barryleajio。顺便说一句,我发现Aprillion的方法更适合我的问题。那太好了-很高兴你被分类,谢谢你的礼貌和反馈。
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