查找范围内的所有匹配单元格值

时间:2017-05-22 12:30:24

标签: excel vba excel-vba

我创建了一个宏,用于查找范围内单元格的所有匹配值。用户在单元格A2中输入例如numb然后,每次他点击Find按钮时,它都会向他显示匹配的单元格,例如Order Number然后purchase number然后{{1 } ...

enter image description here

这是我的代码

part number

它工作正常但是当用户例如按下不在我的范围内的单元格时,按钮Sub find_matched_cells() w = ActiveWorkbook.Sheets("Sheet4").Range("A2") ActiveWorkbook.Sheets("Sheet4").Range("A4:A104").Find(What:=(w), After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate End Sub 上的按钮将不起作用。问题出在

find

例如,如果您错误地选择了不在A4中的单元格:A104,则ActiveCell将不在我的范围内,并且会出错。

我需要添加条件,例如第一个ActiveCell从A4开始,如果我找到第一个匹配的单元格,那么ActiveCell将获取该值。

还有其他建议吗?非常感谢你。

2 个答案:

答案 0 :(得分:1)

你可以检查十字路口。我会稍微重新编写代码,具体取决于你需要对每个找到的单元格实际做些什么 - 它只是选择它们吗?我修改了下面的代码,以避免在找不到值时出错。

Sub x()

Dim rFind As Range, sAddr As String, w

w = ActiveWorkbook.Sheets("Sheet4").Range("A2")

With ActiveWorkbook.Sheets("Sheet4").Range("A4:A104")
    Set rFind = .Find(What:=w, LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:=False, SearchFormat:=False)
    If Not rFind Is Nothing Then
        sAddr = rFind.Address
        Do
            rFind.Select
            MsgBox w & " found at " & rFind.Address
            Set rFind = .FindNext(rFind)
         Loop While rFind.Address <> sAddr
    End If
End With

End Sub

答案 1 :(得分:1)

一种方法是......

Sub find_matched_cells()
    Dim Rng As Range
    Set Rng = ActiveWorkbook.Sheets("Sheet4").Range("A4:A104")
     w = ActiveWorkbook.Sheets("Sheet4").Range("A2")
    If Intersect(ActiveCell, Rng) Is Nothing Then Range("A4").Select
    Rng.Find(What:=(w), After:=ActiveCell, LookIn:=xlFormulas, _
     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
     MatchCase:=False).Activate

End Sub