Найти все строки в другом ключе соответствия листа - PullRequest
0 голосов
/ 27 мая 2019

В моей книге Excel есть два листа, один из которых называется «Клиент», а другой - «Продукт»:

Customer

Product

Я хочу создать таблицу «Уточняющий запрос» на листе «Клиент», где, например, в ячейке G2, над таблицей поиска, я добавляю customer_id, для которого я хочу найти все строки в листе под названием «Продукт». Так, например, если я в G2 введу «1», я получу две совпадающие строки на листе «Продукт». Я пытался использовать VLOOKUP, но я всегда просто сопоставляю первый ряд, и ни один из остальных.

EDIT : в таблице поиска вы получите только информацию на листе «Продукт»: если вы введете «1», вы получите строки 2 и 3 из листа «Продукт». Customer_id имеет только одну строку на customer_id на листе под названием «customer», тогда как на листе «Product» вы можете иметь много строк на customer_id

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Исходными данными для сводной таблицы будет ваш продукт: enter image description here

Создайте сводную таблицу и возьмите поле клиента для фильтрации в настройках: enter image description here

Простое изменение номера в ячейке B2 приведет к возврату продукта, связанного с этим идентификатором клиента.

ПРИМЕЧАНИЕ: Если вы введете Customer_id, который не является в листе продукта, появится сообщение Msgbox с предупреждением об этом. Поэтому, если вы видите в любой момент это предупреждение, это означает, что customer_id имеет 0 записей в PRoduct Sheet:)

Надеюсь, это поможет

0 голосов
/ 27 мая 2019

Вы можете попробовать Workbook_Change:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim wsCus As Worksheet, wsPro As Worksheet
    Dim LastRow As Long, ID As Long, i As Long
    Dim arr As Variant
    Dim FullRecord

    With ThisWorkbook
        Set wsCus = .Worksheets("Customer")
        Set wsPro = .Worksheets("Product")
    End With

    If Not Intersect(Target, wsCus.Range("G2")) Is Nothing And Target.Count = 1 Then

        ID = Target.Value

        With wsPro

            LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

            arr = .Range("A2:A" & LastRow)

            For i = LBound(arr) To UBound(arr)

                If arr(i, 1) = ID Then

                    If FullRecord = "" Then
                        FullRecord = i + 1
                    Else
                        FullRecord = FullRecord & ", " & i + 1
                    End If

                End If

            Next i

            Application.EnableEvents = False
                If FullRecord = "" Then
                    wsCus.Range("I2").Value = "No match found"
                Else
                    wsCus.Range("I2").Value = "Matched lines for ID (" & ID & "): " & FullRecord
                End If
            Application.EnableEvents = True

        End With

    End If

End Sub

Инструкции:

  1. После того, как ваша рабочая книга открыта, нажмите ALT & F11, чтобы открыть VBA Editor.
  2. Doubleщелкните на листе клиента в левой верхней части.
  3. Выберите рабочий лист.
  4. Изменить событие.
  5. Вставьте код, как показано на рисунке.
  6. Затем сохраните книгу как Excel Macro - Enabled Workbook, закройте VBA Editor и измените значение G2.

Шаги:

enter image description here

Результаты:

Найти соответствие

enter image description here

Нет совпадений

enter image description here

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