FindNextメソッドで検索を継続するマクロが同じ値のセルがあるのに見つけれないが?
Question 021p   Previous Next
181ページ 3章3-4 合わせ技[1] ◆ 環境・・ Excel 2003 & Windows XP
詳細は こちら
お世話になります。 付属CD-ROMから find.xls をコーピーして使用しています。
あるシートのセルの検索をしたときに、最初のセルは検知しますが nextが検知しないことがあります。 次のシートへ移行してしまいます。
すべてのシートで起こるのではなく正確に検知するシートもあります。特定のシートで必ず未検知になるようです。
このシートをExcel自体にある検索機能で調べるとすべて検知できるので、シート自体に問題ないように思うのですが、たとえば同じ単語をA1からA5までならべて検索すると、2番目だけ検知して終了してしまいます といった感じです。
ヒントがあれば教えてください。よろしく お願いいたします。
Answer   Copyright (C) 2010.6.28 永井善王
拙著「ExcelVBAマクロ組み方講座 プロの定番・裏技・合わせ技[編]」をご購読、ありがとうございます。合わせ技[1]は、「ユーザーが開いた全ブックの全シートを指定された値で検索し見つかったセルを順に表 示する」と題するサンプルです。

さっそく再現テストを行いましたところ、右図のように同じ単語が並んだシートの場合は、ご連絡いただいたとおりの不具合が発生することを確認できました。 出版前の動作確認には万全を期したつもりでしたが、大変申し訳ございません。 お詫び申し上げます。

つきましては、183ページにある下記マクロだけは、
下記赤字のカ所を修正してからご利用ください。
マクロの他の部分 (P.182とP.184) に修正はありません。
Sub 開いた全ブックの全シートを検索し見つかったセルを順に表示する()
    検索するブックをユーザーに開いてもらう
    If Not 開いたスイッチ Then Exit Sub
    検索する値を入力してもらう
    If 検索値 = "" Then Exit Sub
'
    For Each ブック In Workbooks                '各ブックについて繰り返す
        If ブック.Name = ThisWorkbook.Name Then GoTo 飛ばす 'このブックは処理しない
        ブック.Activate
        For Each シート In Worksheets           '各シートについて繰り返す
            シート名 = シート.Name
            Set 最初に見つかったセル = シート.Cells.Find(検索値) '★★★
            If Not 最初に見つかったセル Is Nothing Then
                Set 見つかったセル = 最初に見つかったセル
                Do
                    見つかったセルのアドレスを取得しシートをアクティブにして選択する
                    見つかったセルをメッセージボックスで表示する
                    Set 見つかったセル = シート.Cells.FindNext(見つかったセル) '★★★
                    If 見つかったセル Is Nothing Or _
                        見つかったセル.Address = 最初に見つかったセル.Address Then
                        Exit Do
                    End If
                Loop
            End If
        Next
飛ばす:
    Next
End Sub
お手数をお掛けしてしまいましたが、よろしくお願い申し上げます。

 

Excel VBA Macro