Дважды щелкните ячейку и найдите значение другого листа. - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь найти в Интернете код VBA, который мог бы мне помочь, но я ничего не смог найти.

Что я пытаюсь сделать:

  • В той же книге у меня есть два листа.
  • На листе 1 столбец A со значениями лотов (только цифры).
  • На листе 2 столбец A с этими значениями (иногда более одного раза с одним и тем же значением) с большим количеством информации в других столбцах.

Пока, хорошо.

Что мне нужно, так это то, что когда я дважды щелкаю одно из этих значений на листе 1, Excel показывает только те же значения на листе 2 (а не только первое вхождение), скрывая остальные.

Пример:

Sheet 1
Column A
123
124
125
126

Sheet 2
Column A
123
124
123
125
123
126

При щелчке в ячейке со значением 123 на листе 1 Excel показывает строки с таким же значением только на листе 2, скрывая другие значения.

Я не знаю, как кодировать. Однако этот код, я думаю, можно использовать. Единственная проблема. Он возвращает номер строки первого вхождения во всплывающем окне. Что мне нужно, так это то, что Excel показывает на листе найденные значения.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'If you select more than one cell, ignore
If Target.CountLarge > 1 Then Exit Sub

'If you select a blank cell, ignore
If Target.Value = vbNullString Then Exit Sub

Dim Finder, ClickRange

'We want the event to fire if you click in column A anywhere
Set ClickRange = Sheets("Sheet1").Range("A:A")

'If you click somewhere else, ignore
If Intersect(Target, ClickRange) Is Nothing Then Exit Sub

'Look for the value in sheet 2 column A
Set Finder = Sheets("Sheet2").Range("A:A").Find(Target.Value, LookAt:=xlWhole)

'If we don't find it, Exit Sub
If Finder Is Nothing Then Exit Sub

'To display the row:
MsgBox (Finder.Row)

'To Select it:
'If we find it, select sheet 2 and select the cell
'Sheets("Sheet2").Activate
'Finder.Select

End Sub

1 Ответ

0 голосов
/ 11 января 2019

Используйте метод Range.AutoFilter , чтобы отфильтровать данные в листе 2 по выбранному значению в листе 1.

Option Explicit

Public Sub FilterBySelectedValue()
    Dim wsFilter As Worksheet
    Set wsFilter = ThisWorkbook.Worksheets("Sheet2")

    wsFilter.UsedRange.AutoFilter Field:=1, Criteria1:=Selection.Value
    wsFilter.Activate 'switch to filtered sheet
End Sub

Просто выберите значение на листе 1, а затем запустите макрос с помощью кнопки или сочетания клавиш. Я настоятельно рекомендую не использовать событие Worksheet_SelectionChange, иначе ваш лист 1 легко станет непригодным для использования.

То есть со следующим выбранным значением в листе 1…

enter image description here

… после выполнения процедуры результат листа 2 покажет:

enter image description here

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