Соответствующие словари - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь сопоставить значения в двух столбцах из двух разных листов в одной книге. Я создал два словаря, каждый из которых содержит нужное мне значение и номер строки. Мне нужно go через каждую строку в столбце «A» на листе 2 и посмотреть, есть ли соответствующее значение в столбце «А» на листе 1. Я сделал словарь, содержащий значения столбца «A» из листа 2 и то же самое для листа 1. (мне может понадобиться только один словарь, сделанный из листа 2, а затем go через столбец «А» в листе 1).

Если есть совпадение, я хочу скопировать значение из столбца «P» из соответствующей строки из листа1 и вставить в лист2 столбец «F».

Пример:

лист1 - столбец = "A" - row = 5 -value = ab c

sheet2 - column = "A" - row = 20 - value = ab c

Если есть совпадение на листе Sheet1 мне нужно взять значение ячейки из «P» в строке 20 и вставить в лист2 в строке 5. Поэтому важно, чтобы вставленное значение было вставлено в нужное место.

Sub Risk()

    ' 1 = Product Master
    ' 2 = Fund Universe

    Const START_ROW_1 = 7
    Const START_ROW_2 = 13
    Const MAX_ROW = 2000
    Const PID_1 = "A"
    Const PID_2 = "A"

    Dim wb As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim iRow As Long, iLastRow As Long, iTargetRow As Long, iCopyRow As Long
    Dim rng As Range, count As Long, countWB As Integer

    Set wb = ThisWorkbook
    Set ws1 = wb.Sheets("Sheet1")
    Set ws2 = wb.Sheets("Sorteret")

    Dim dict1 As Object, dict2 As Object
    Dim skey1 As String, skey2 As String
    Dim arPID1 As Variant, arPID2 As Variant

    Set dict1 = CreateObject("Scripting.Dictionary")
    Set dict2 = CreateObject("Scripting.Dictionary")

    ' Get PENSION ID SHEET 1
    iLastRow = ws1.Cells(Rows.count, PID_1).End(xlUp).Row
    For iRow = 7 To iLastRow
        skey1 = ws1.Cells(iRow, PID_1)
        If dict1.Exists(skey1) Then
            dict1(skey1) = dict1(skey1) & ";" & iRow
        Else
            dict1(skey1) = iRow
        End If
        Debug.Print dict1(skey1)
    Next


    ' Get PENSION ID SHEET 2
    iLastRow = ws2.Cells(Rows.count, PID_2).End(xlUp).Row
    For iRow = 13 To iLastRow
        skey2 = ws2.Cells(iRow, PID_2)
        If dict2.Exists(skey2) Then
            dict2(skey2) = dict2(skey2) & ";" & iRow
        Else
            dict2(skey2) = iRow
        End If
        Debug.Print skey2, dict2.count
    Next

End sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...