我正在嘗試搜索 Excel 電子表格中的文本。我正在查看 Microsoft 檔案中 Range.Find 方法的示例:https://docs.microsoft.com/en-us/office/vba/api/excel.range.find。
這些示例僅顯示如何搜索一個值。是否可以使用 Range.Find 方法搜索多個值,或者是否必須將多個 Range.Find 方法放置在嵌套的 For 回圈或其他一些 VBA 結構中?或者使用 Pandas 結構會更有效嗎?我想要一些關于如何實作這一點的專家建議。
提前致謝。
uj5u.com熱心網友回復:
是的,您可以重復Range.Find呼叫并使用After引數來確保下一次呼叫不會重新找到上一個范圍。VBA 實際上有一個內置函式來幫助簡化這個程序,Range.FindNext
因此,您首先設定 aRange.Find然后 VBA 保存引數,以便您可以這樣做Range.FindNext,它會從.Find函式中復制您的引數。您只需要After在Range.FindNext.
這是一個示例和如何設定的函式:
Sub Example2()
Dim relevantRanges(2) As Range
Set relevantRanges(0) = FindAll("unopened")
Set relevantRanges(1) = FindAll("needs work")
Set relevantRanges(2) = FindAll("incomplete")
'Now each element in relevantRanges contains a range of all found cells with it's word
End Sub
Function FindAll( _
LookFor As String, _
Optional WithinSheet As Worksheet = Nothing, _
Optional LookIn As XlFindLookIn = xlValues, _
Optional LookAt As XlLookAt = xlPart, _
Optional MatchCase As Boolean = False _
) As Range
If WithinSheet Is Nothing Then Set WithinSheet = ActiveSheet
With WithinSheet.Cells
Dim rFirst As Range
Set rFirst = .Find(What:=LookFor, LookIn:=LookIn, LookAt:=LookAt, MatchCase:=MatchCase)
If rFirst Is Nothing Then
Set FindAll = Nothing
Exit Function
End If
Dim FoundRange As Range
Set FoundRange = rFirst
Dim rNext As Range
Set rNext = .FindNext(After:=rFirst)
While rNext.Address <> rFirst.Address
Set FoundRange = Union(FoundRange, rNext)
Set rNext = .FindNext(After:=rNext)
Wend
End With
Set FindAll = FoundRange
End Function
我使用rFirst和rNext作為單獨范圍的原因是我有一個回圈的退出條件。我可以比較地址以確保當.Find回傳到第一個匹配項時,它退出While回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/354465.html
