Копирование данных по ключевому столбцу из другого листа.(Попытка сделать так, как vlookup не работает в VBA) - PullRequest
0 голосов
/ 10 июня 2019

Я хочу, чтобы код использовал доступные мне ключевые данные и перекрестные ссылки на следующем листе, чтобы получить данные из следующего столбца для того же ключа на этом листе.Я пытался использовать VLOOKUP, но, хотя он работает нормально вручную, он не работает при использовании в макросе.Пожалуйста, обратитесь к приведенному ниже коду:

Таким образом, чтобы получить результаты, я попытался выполнить поиск данных, используя циклы по столбцу данных, которые мне доступны.

    Sheets("Details").Select
    Dim myval, strr As String
    Dim cell As Range
    Dim i, j, k As Integer
    j = 3
    i = ActiveWorkbook.Worksheets("Details").Range("A1", 
    Worksheets("Details").Range("A1").End(xlDown)).Rows.Count

    Sheets("Pd Details").Select
    Do While Cells(j, 1).Value <> ""
        myval = Cells(j, 1).Value
            For k = 3 To i
                Sheets("Details").Select
                If myval = Cells(k, 1).Value Then
                    strr = Cells(k, 2).Value
                    Sheets("Pd Details").Select
                    Cells(j, 4).Value = strr
                    Exit For
                End If
            Next
        Sheets("Pd Details").Select
        j = j + 1
    Loop

Я хочу вывод в виде поиска ключа и вывод результата на ключ в 4-м столбце таблицы данных, в которой есть дамп данных.

     Details sheet:

enter image description here Pd Details sheet: enter image description here enter image description here Resulting Pd Details sheet:

1 Ответ

1 голос
/ 10 июня 2019

Как насчет использования VLookUp в VBA, как показано ниже, эта строка получит последнюю строку в вашей таблице сведений о PD, а затем использует Vlookup для получения желаемых результатов, а затем удалит формулу, оставив только значения.

(Я удостоверился, что удалил все операторы Select, так как это только замедлит ваш код)

Sub Test()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wsDetails As Worksheet: Set wsDetails = wb.Worksheets("Details")
Dim wsPDDetails As Worksheet: Set wsPDDetails = wb.Worksheets("Pd Details")
'declare and set the worksheets
Dim LastRow As Long

LastRow = wsPDDetails.Cells(wsPDDetails.Rows.Count, "A").End(xlUp).Row
'get the last row with data on Column A on the PD Details sheet

wsPDDetails.Range("D1:D" & LastRow).FormulaR1C1 = "=VLOOKUP(RC[-3],Details!C[-3]:C,2,FALSE)"
'use the Vlookup formula

wsPDDetails.Range("D1:D" & LastRow).Value = wsPDDetails.Range("D1:D" & LastRow).Value
'convert the results from the formula to values and remove the formula itself.
End Sub
...