在另一个工作表中恢复Excel工作表的记录列的数据

时间:2019-06-04 12:41:21

标签: excel vba

当名称列相同时,我想从另一个Excel工作表上的一个Excel工作表中检索记录的一列数据(注册号)。

也就是说,在“会议”表上有

Matric Apellido         Nombre  Avión
12     Burrow           Irving  F15     
42     Nelson           Howard  A10
18     Krings           Jack    F18    
10     Mitaux-Maurouard Guy     Rafale   

在“ RECAP”工作表中,

Apellido         Nombre ...
Nelson           Howard ...
Burrow           Irving ...
Mitaux-Maurouard Guy   
Krings           Jack   ...   

Y megustaría

Apellido Nombre ... Matric
Nelson   Howard ... 42
Burrow   Irving ... 12  
Krings   Jack   ... 18

我尝试过:

Sub Test()

    Dim i As Long
    Dim arr As Variant
    Dim Matriculas As New Scripting.Dictionary 'Need the Microsoft Scripting Runtime library in Tools-> References

    'We store the sheet with everything in an array
    With ThisWorkbook.Sheets("Convocation")
        arr = .UsedRange.Value
    End With

    'We assume that the registration is in column A and surnames B and C
    For i = 2 To UBound(arr)
        If arr(i, 1) = vbNullString Then Exit For 'if we find empty values we leave the loop
        If Not Matriculas.Exists(arr(i, 2) & arr(i, 3)) Then 'we check that the combo of surnames is not duplicated
            Matriculas.Add arr(i, 2) & arr(i, 3), arr(i, 1) 'we keep in the dictionary the combo of surnames with their registration
        Else 'If the person could have more than 1 license plate then:
            Matriculas(arr(i, 2) & arr(i, 3)) = Matriculas(arr(i, 2) & arr(i, 3)) & ", " & arr(i, 1) 'we add the others separated by ","
        End If
    Next i

    'We store the sheet with everything in an array
    With ThisWorkbook.Sheets("RECAP")
        arr = .UsedRange.Value
        'We assume that the surnames are in columns A and B, and the registration in C
        For i = 2 To UBound(arr)
            If arr(i, 1) = vbNullString Then Exit For 'if we find empty values we leave the loop
            arr(i, 3) = Matriculas(arr(i, 1) & arr(i, 2)) 'here we assign the registration stored in the dictionary according to surnames
        Next i
        .UsedRange.Value = arr 'we return the array to the sheet
    End With

End Sub

但是,当我编译时出现以下错误:Sub或Function undefined。我已将代码包含在所有工作表的Microsoft Excel Objects中,尤其是在ThisWorkbook中。

编辑:我知道我的问题

我的问题不是第一行,而是Ubond。当我摆脱它时,我不再有错误。但是它们是循环所必需的。

1 个答案:

答案 0 :(得分:1)

CONVOCATION表上的数据如下:

enter image description here

表RECAP是:

enter image description here

要从字段 id s_code s_percent s_type s_name player total-value XI-GB-1 12220 35 2 yaba p1 120398 XI-GB-1 14020 33 2 yaba p1 120398 XI-GB-1 31110 32 2 yaba p1 120398 XI-GB-2 23630 36 4 daba p4 123453 XI-GB-2 41010 30 4 daba p4 123453 XI-GB-2 23110 34 4 daba p4 123453 XI-GB-3 15120 75 7 doo p3 78542 XI-GB-3 12511 25 7 doo p3 78542 XI-GB-4 23110 10 9 hakuna p2 97234 XI-GB-4 23510 55 9 hakuna p2 97234 XI-GB-4 15110 35 9 hakuna p2 97234 XI-GB-5 23210 40 1 matata p6 10000 XI-GB-5 23230 60 1 matata p6 10000 中获取数字,我使用了一个数组公式:

<mat-checkbox (click)= "$event.stopPropagation()" (change)="$event ? selection.toggle(row) :null" [checked]="selection.isSelected(row)" [disabled]="myCondition" color="primary"> </mat-checkbox>

  

因为这是一个数组公式,所以必须将其插入    CTRL + SHIFT + ENTER 否则将无效!

注意:关于您的数据,只要所有MAtric=INDEX(Convocation!$A$2:$A$5;MATCH(A2&B2;Convocation!$B$2:$B$5&Convocation!$C$2:$C$5;0))在行之间都不同,此公式将起作用。如果任何时候您有2个客户端(2行),它们的ApellidoNombre相同,则该公式将无法正常工作,因为yoo需要第三个字段来区分两个客户端(也许是第二Apellido)。

希望您可以使其适应您的需求。

更新:万一该公式一无所获,它将引发错误,但是您可以使用Nombre捕获它,因此理想的公式将是:

Apellido

  

因为这是一个数组公式,所以必须将其插入    CTRL + SHIFT + ENTER 否则将无效!

更新2:您可以在此处下载示例:https://drive.google.com/open?id=1kQ0boXYl7nvkTef62zVg9Jw7raOqgsuf