双击单元格,找到另一张纸的价值

时间:2019-01-10 15:51:26

标签: excel vba

我正在尝试在网络上搜索对我有帮助的VBA代码,但我什么也找不到。

我想做什么:

  • 在同一本工作簿中,我有两张纸。
  • 在工作表1中,A列具有很多值(仅数字)。
  • 在工作表2中,具有这些值(有时是相同值的1倍以上)的A列在其他列中具有更多信息。

到目前为止,还可以。

我需要的是,当我双击工作表1中的一个值时,excel在工作表2中仅显示相同的值(不仅是第一次出现),而其他值则隐藏了。

示例:

Sheet 1
Column A
123
124
125
126

Sheet 2
Column A
123
124
123
125
123
126

在工作表1中单击值为123的单元格时,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 :(得分:1)

使用Range.AutoFilter method通过工作表1中的选定值过滤工作表2中的数据。

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