<p>下記のようなケースを想定する。</p>
<table>
    <tbody>
        <tr>
            <th>　</th>
            <th>番号</th>
            <th>名前</th>
        </tr>
        <tr>
            <th>　</th>
            <th>1</th>
            <th>2</th>
        </tr>
        <tr>
            <th>A</th>
            <td>0001</td>
            <td>佐藤</td>
        </tr>
        <tr>
            <th>B</th>
            <td>0002</td>
            <td>鈴木</td>
        </tr>
        <tr>
            <th>C</th>
            <td>0003</td>
            <td>田中</td>
        </tr>
        <tr>
            <th>D</th>
            <td>0004</td>
            <td>小林</td>
        </tr>
    </tbody>
</table>
<p><strong>※1 番号は書式指定で &quot;0000&quot; とし、 1 を 0001 としている</strong><br />
<br />
たとえば、番号 &quot;0003&quot; の田中さんを取得したい場合には以下のように処理をする。</p>
<pre class="brush: vb;">
Sub 番号3番の田中さんを見つける()
    Const NameCol = 2
    Dim SearchArea As Range             ' 検索範囲
    Dim c As Range                      ' 検索結果
    Dim firstAddress As String          ' 最初に見つかったセルのアドレス
    
    ' 検索範囲
    With ThisWorkbook.Sheets(&quot;Sheet1&quot;).Range(&quot;A1&quot;).CurrentRegion
        Set c = .Columns(1).Find(3)     ' 検索範囲の最初のカラムから番号を検索
        If Not c Is Nothing Then        ' 発見すれば結果にセルが、見つからなければ Nothing が返る
            firstAddress = c.Address    ' 最初のアドレスを覚えておく ※2
            Do
                MsgBox .Cells(c.Row, NameCol), vbOKOnly, &quot;発見&quot;
                Set c = .FindNext
            Loop While Not c Is Nothing And (c.Address &lt;&gt; firstAddress)
        End If
    End With
End Sub
</pre>
<p><strong>※2 同じ番号が複数回出現するなどでループにて処理を行う場合、最後のセルの次を検索すると最初のセルが見つかる。<br />
このため、最初に見つかったセルのアドレスを覚えておく必要がある。</strong><br />
この方法で、検索を行うと if 文を利用して検索するよりも断然早く処理を完了させることができる。<br />
応用として、見つけたセルを削除する処理を考えてみたが、このループの中ではできない。<br />
削除処理自体は、</p>
<pre class="brush: vb;">
Rows(c.Row).Delete Shift:= xlUp</pre>
<p>で可能だが、この処理を行うと Loop 判定行で c が見つからずに例外が発生する。</p>