Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 关联不同列表中的值_Excel - Fatal编程技术网

Excel 关联不同列表中的值

Excel 关联不同列表中的值,excel,Excel,我有一份有3300个名字和地址的名单。唯一的名字只有300个。为了对它们进行地理编码,我只搜索了唯一的地址,获得了每个地址的坐标 现在,我在两张MS excel表格中列出了这两个列表,我想将每个姓名与他的地址坐标关联起来 我建议将纬度和经度列添加到蓝色表中,而不是创建绿色表 使用以下公式: =INDEX(Latitude_orange_column, MATCH(address1_blue_cell, Address_orange_column, 0)) =INDEX(Longitude_ora

我有一份有3300个名字和地址的名单。唯一的名字只有300个。为了对它们进行地理编码,我只搜索了唯一的地址,获得了每个地址的坐标

现在,我在两张MS excel表格中列出了这两个列表,我想将每个姓名与他的地址坐标关联起来

我建议将纬度和经度列添加到蓝色表中,而不是创建绿色表

使用以下公式:

=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