3

単一のデータ列を使用.Findして検索しようとしています。.FindNext最初に、値「Total」を含む最初のセルを見つける必要があります。私が取得しようとしているセルは、「合計」セルの後に値「Tech」を含む 3 番目のセルです。Cells(1, 1) に「Tech」または「Total」が含まれていないことは確かです。

Dim FirstTotal As Range
Dim SearchRng As Range
Dim ResultRng As Range
Set SearchRng = Range("A:A")

Set FirstTotal = SearchRng.Find(What:="Total", After:=Cells(1, 1), SearchDirection:=xlNext)
Set ResultRng = SearchRng.Find(What:="Tech", After:=FirstTotal, SearchDirection:=xlNext)
SearchRng.FindNext().Activate
SearchRng.FindNext().Activate

このコードを実行した回数の約 50% で、. で始まる行で型の不一致エラーが発生して停止しましたSet ResultRng =。残りの時間、コードは最後まで実行されましたが、結果はコードの最後の 2 行が完全に無視されたように見えます。

ここでの答えはかなり初歩的なものだと思いますが、私はvbaに慣れていないので、これまでに見つけたリソースはこれに答えていません. 助けてください!

4

2 に答える 2

1

これは役に立ちますか?

トピック: Excel VBA の .Find と .FindNext

リンク: http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/

リンクから抽出:

Sub Sample()
    Dim oRange As Range, aCell As Range, bCell As Range
    Dim ws As Worksheet
    Dim ExitLoop As Boolean
    Dim SearchString As String, FoundAt As String
    On Error GoTo Err
    Set ws = Worksheets("Sheet3")
    Set oRange = ws.Columns(1)

    SearchString = "2"
    Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
                LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
    If Not aCell Is Nothing Then
        Set bCell = aCell
        FoundAt = aCell.Address
        Do While ExitLoop = False
            Set aCell = oRange.FindNext(After:=aCell)

            If Not aCell Is Nothing Then
                If aCell.Address = bCell.Address Then Exit Do
                FoundAt = FoundAt & ", " & aCell.Address
            Else
                ExitLoop = True
            End If
        Loop
    Else
        MsgBox SearchString & " not Found"
    End If
    MsgBox "The Search String has been found at these locations: " & FoundAt
    Exit Sub
Err:
    MsgBox Err.Description
End Sub
于 2012-06-11T22:13:05.033 に答える
1

"Total" が見つからない場合、FirstTotal は Nothing になり、ResultRange Find (2 行目) の "After" 引数に FirstTotal を使用しようとすると、型の不一致が発生します。これにより、そのエラーが防止されます。

Set FirstTotal = SearchRng.Find(What:="Total", After:=Cells(1, 1), SearchDirection:=xlNext)
If Not FirstTotal is Nothing Then
   Set ResultRng = SearchRng.Find(What:="Tech", After:=FirstTotal, SearchDirection:=xlNext)
End If

一般的に言えば、依存する Find はこのように扱う必要があります。

明らかに、ここでは何らかの Else ステートメントが必要ですが、それが何であるかはわかりません。

于 2012-06-11T20:14:12.903 に答える