Как получить несколько значений столбцов в vlookup, используя VBA? - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть файл Excel, который выглядит следующим образом: sample file

Теперь я создал список в ячейке "L2", используя значения в столбце имени, и добавилкнопка «Найти».

Что я пытаюсь сделать, когда я нажимаю кнопку после выбора значения в «L2», это даст мне соответствующие значения Имя, ID, DOB, E-mail из таблицы «A4: E12» в ячейках «I6: L6» и, если «I6: L6» имеет значения, он будет переходить к «I7: L7» и так далее каждый раз, когда я нажимаю кнопку.

Вот код, который я сделал:

Sub getValues()
Range("I6").Select
ActiveCell.Formula = "=VLOOKUP($L$2,$A$5:$E$12,{1,2,4,5},0)"
Range("I6").AutoFill Destination:=Range("I6:L6"), Type:=xlFillDefault
Range("I6:L6").Select
Range("A3").Select
End Sub

Проблема с этим кодом в том, что он дает значения, как показано ниже: result

Где ожидаемый результат:

expected

Кроме того, он должен автоматически вставить значения в «I7: L7», если «I6: L6»занят и т. д.

Может кто-нибудь показать мне, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Это длинный ответ (и не самый эффективный), но я написал его таким образом, чтобы проиллюстрировать его шаг за шагом

Смотрите комментарии внутри кода и адаптируйте его под свои нужды

Public Sub GetDataByPersonName()

    Dim sourceSheet As Worksheet
    Dim sourceDataRange As Range

    Dim rowOffset As Long

    Dim sourceSheetName As String
    Dim sourcePersonName As String
    Dim sourceRangeAddress As String
    Dim sourceLookupTableRange As String
    Dim sourceMatchedRow As Variant

    ' Results
    Dim resultsInitialCellAddress As String
    Dim resultName As Variant
    Dim resultID As Variant
    Dim resultCountry As Variant
    Dim resultDOB As Variant
    Dim resultEmail As Variant

    ' Adjust to your needs
    sourceSheetName = "Sheet1" ' Sheet name where data is located
    sourceRangeAddress = "L2" ' Cell address of enter name
    sourceLookupTableRange = "A4:E12" ' Range address where lookup data is located
    resultsInitialCellAddress = "I4" ' Cell address of headers destination where results are going to be added

    ' Set references to sheet and lookup range
    Set sourceSheet = ThisWorkbook.Worksheets(sourceSheetName)
    Set sourceDataRange = sourceSheet.Range(sourceLookupTableRange)

    ' Get the current name to be looked up
    sourcePersonName = sourceSheet.Range(sourceRangeAddress).Value

    ' Lookup the results (see columns(1) to check the column where name is located
    sourceMatchedRow = Application.Match(sourcePersonName, sourceDataRange.Columns(1), 0)

    If Not IsError(sourceMatchedRow) Then
        ' Find the last empty row below results header
        If sourceSheet.Range(resultsInitialCellAddress).Offset(1, 0).Value = vbNullString Then
            rowOffset = 1
        Else
            rowOffset = sourceSheet.Range(resultsInitialCellAddress).End(xlDown).Row - sourceSheet.Range(resultsInitialCellAddress).Row + 1
        End If

        ' Name (see name column is 1 at the end for line)
        resultName = Application.WorksheetFunction.Index(sourceDataRange, sourceMatchedRow, 1)
        resultID = Application.WorksheetFunction.Index(sourceDataRange, sourceMatchedRow, 2)
        resultCountry = Application.WorksheetFunction.Index(sourceDataRange, sourceMatchedRow, 3)
        resultDOB = Application.WorksheetFunction.Index(sourceDataRange, sourceMatchedRow, 4)
        resultEmail = Application.WorksheetFunction.Index(sourceDataRange, sourceMatchedRow, 5)

        ' Dump results into worksheet
        sourceSheet.Range(resultsInitialCellAddress).Offset(rowOffset, 0).Value = resultName
        sourceSheet.Range(resultsInitialCellAddress).Offset(rowOffset, 1).Value = resultID
        sourceSheet.Range(resultsInitialCellAddress).Offset(rowOffset, 2).Value = resultCountry
        sourceSheet.Range(resultsInitialCellAddress).Offset(rowOffset, 3).Value = resultDOB
        sourceSheet.Range(resultsInitialCellAddress).Offset(rowOffset, 4).Value = resultEmail

    End If

End Sub

Помните, чтобы пометить ответ, если он помог вам, чтобы помочь другим

0 голосов
/ 10 ноября 2019

Хорошо, я думаю, вы должны попытаться сделать это самостоятельно и записать свои шаги в макросе. Вы выучите тонну таким образом. См. Ссылку ниже.

https://www.get -digital-help.com / как вернуть несколько значений с помощью vlookup-in-excel /

Включите Макро-рекордер, прежде чем нажимать по шагам. Тогда у вас будет весь код, который вам нужен !!

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