VBA: Попытка создать код, который выполняет формулу, для извлечения данных из другого листа. - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь написать код VBA, который извлекает данные из другого листа с помощью функции массива соответствия индекса (поскольку он должен удовлетворять двум переменным). По сути, у меня есть исходный рабочий лист (Рабочий лист 1), который заполнен данными, а затем мой основной рабочий лист (Рабочий лист 2) извлечет данные с учетом критериев, чтобы убедиться, что числа совпадают правильно.

Ниже приведено Пример того, что я пытаюсь сделать :

{= INDEX ($ C $ 4: $ C $ 7, MATCH (1, (F4 = $ B $ 4: $ B $ 7) * (E4 = $ A $ 4: $ A $ 7), 0)) }

Конечно, может быть лучший способ получить "Зарплату", учитывая 2 критерия ("Страна" и "Имя"), поэтому я также открыт для этих предложений.

РЕДАКТИРОВАТЬ : Я буду sh, чтобы этот код был динамическим c, чтобы при добавлении новых строк данных формула все равно реплицировалась для всех строк.

1 Ответ

0 голосов
/ 20 февраля 2020

Использование функций массива замедляет работу компьютера и делает невозможным запуск файлов Excel в какой-то момент. Использовать словарь удобно.

Sub test()
    Dim wsS As Worksheet
    Dim wsM As Worksheet
    Dim vDB, vResult
    Dim Dic As Object 'Dictionary
    Dim rngResult As Range
    Dim i As Long, s As String

    Set wsS = Sheets("Source")
    Set wsM = Sheets("Main")

    Set Dic = CreateObject("Scripting.Dictionary")

    vDB = wsS.Range("a1").CurrentRegion
    Set rngResult = wsM.Range("a1").CurrentRegion
    vResult = rngResult

    For i = 2 To UBound(vDB, 1)
        s = vDB(i, 1) & "," & vDB(i, 2)
        If Dic.Exists(s) Then
        Else
            Dic.Add s, vDB(i, 3)
        End If
    Next i
    For i = 2 To UBound(vResult, 1)
        s = vResult(i, 1) & "," & vResult(i, 2)
        vResult(i, 3) = Dic.Item(s)
    Next i
    rngResult = vResult
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...