我正在尝试在网络上搜索对我有帮助的VBA代码,但我什么也找不到。
我想做什么:
到目前为止,还可以。
我需要的是,当我双击工作表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
答案 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中具有以下选定值...
…运行该过程后,工作表2的结果将显示: