アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

確実な検索

◆検索3 確実な検索


  規格名が以下のような製品があるとします。

    ABS01234B
    ABS01234A
    ABS01234C
    ABS01234
    ABS01234AB
    ABS01234A-1
    ABS01234DD
    ABS01234AC

  ABS01234 で検索すると、本当は ABS01234 だけを検索したいのに、
  検索される文字列の頭8文字しか見ていないので全部ヒットしてしまいます。

  これの回避方法です。

  色々あると思いますが、私が行っている方法を紹介します。

  検索する文字数と検索される文字数が同じ文字数かチェックしています。


Sub test()

    Dim FoundCell As Range
    Dim firstAddress As String

    'B列で Range("D2")と同じ文字を検索する
    Set FoundCell = Columns("B").Find(Range("D2"))

    If Not FoundCell Is Nothing Then        'ヒットした

        '文字数が同じか確認する
        If Len(FoundCell) = Len(Range("D2")) Then

            'ここで何らかの処理
            FoundCell.Select

        Else
           '同じ文字数ではなかったのでさらに検索を続ける
           
            '最初の検索でヒットしたアドレスを記憶しておく
            firstAddress = FoundCell.Address

            Do
                'B列で Range("D2")と同じ文字をさらに検索する
                Set FoundCell = Columns("B").FindNext(FoundCell)
        
                '文字数が同じか確認する
                If Len(FoundCell) = Len(Range("D2")) Then
            
                    'ここで何らかの処理
                    FoundCell.Select

                    'ループを抜ける
                    Exit Do
                End If
            Loop While Not FoundCell Is Nothing And _
                           FoundCell.Address <> firstAddress
        
        End If
    End If

End Sub

  example22 をダウンロードして動作を確認してください。



Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.