Excel 基于另一个单元格中的值搜索并查找值

Excel 基于另一个单元格中的值搜索并查找值,excel,vba,Excel,Vba,我正在尝试构建一个宏来搜索特定列。 以下是步骤: 1.用户在单元格中输入一个数字,然后执行宏。 2.根据用户输入的值,宏将在列中查找文本。 除了我不知道如何定义用户输入的单元格的值外,我所有的东西都工作得很好。这里的任何帮助都将不胜感激 Sheets("New Version ").Select Range("B4").Select Sheets("PN_List").Select Columns("I:I").Select 'below is where I s

我正在尝试构建一个宏来搜索特定列。

以下是步骤:
1.用户在单元格中输入一个数字,然后执行宏。
2.根据用户输入的值,宏将在列中查找文本。

除了我不知道如何定义用户输入的单元格的值外,我所有的东西都工作得很好。这里的任何帮助都将不胜感激

Sheets("New Version ").Select
    Range("B4").Select
    Sheets("PN_List").Select
    Columns("I:I").Select
    'below is where I struggle
    Selection.Find(What:=(""), After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate 

假设用户在单元格B4中输入一个数字,那么您只需将代码调整为:

Selection.Find(What:=Range("B4").Value, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate 

您可以通过两种方式来实现这一点

编号1:

基于模块:(模块中的代码)

编号2:

基于事件的工作表。(第页代码)

B4中输入数据的第一个宏,然后运行宏。
每当您更改
B4
中的值时,第二个将激发
此时会出现一个msgbox,询问您是否要搜索输入的数据

希望这有帮助

Sub Sample()

Dim search_range as Range, search_value as Range, _
    lastcell as Range, foundcell as Range
Dim ws as Worksheet

Set ws = Thisworkbook.Sheets("PN_List")
Set search_range = ws.Range("I1", ws.Range("I" & Rows.Count).End(xlUp))
Set lastcell = search_range.Cells(search_range.Cells.Count)
Set search_value = Thisworkbook.Sheets("New Version").Range("B4")

Set foundcell = search_range.Find(What:=search_value, After:=lastcell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

If Not foundcell Is Nothing Then foundcell.Activate Else Msgbox "Not Found"

End Sub
Private Sub Worksheet_Change(ByVal Target as Range)

Dim search_range as Range, search_value as Range, _
    lastcell as Range, foundcell as Range
Dim ws as Worksheet

Set ws = Thisworkbook.Sheets("PN_List")
Set search_range = ws.Range("I1", ws.Range("I" & Rows.Count).End(xlUp))
Set lastcell = search_range.Cells(search_range.Cells.Count)
Set search_value = Thisworkbook.Sheets("New Version").Range("B4")

If Not Intersect(Target, search_value) Is Nothing Then
query = Msgbox("Search data?", vbYesNo)
If query = 7 Then Exit Sub
Set foundcell = search_range.Find(What:=search_value, After:=lastcell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

If Not foundcell Is Nothing Then foundcell.Activate Else Msgbox "Not Found"

End Sub