[[20210630134507]] 『VBA Find関数 A1セルを含む結合セル検索できない=x(no_name) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA Find関数 A1セルを含む結合セル検索できない?』(no_name)

セルA1を含む結合されたセルをFind関数で検索しようとすると,
検索されません。これは仕様でしょうか?

また,A1単体のセルとそれ以外のいずれかのセルに同じ検索値が入っている場合,A1単体セルではないセルの値が返ってくることも確認しました。これも仕様でしょうか?

A1単体のセルやA1を含まない結合セルに対しては検索できることは確認しました。

テストに使用したプログラムは下記に記します。

Sub FindTest()

    Dim sCell As Range

    Set sCell = ActiveWorkbook.ActiveSheet.Cells.Find(What:="AAA", _
                    LookIn:=xlFormulas, _
                    LookAt:=xlWhole)

    If sCell Is Nothing Then

        Debug.Print "見つかりませんでした"

    Else

        Debug.Print "見つかりました"; sCell.Row; " "; sCell.Column

    End If

End Sub

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 こちらでのテスト結果だけ。
 EXCEL2016+Windows10で。
 横の結合セル
 >Set sCell = ActiveWorkbook.ActiveSheet.Cells.Find(What:="AAA", _
                  LookIn:=xlFormulas, _
                  SearchOrder:=xlByRows, _
                  LookAt:=xlWhole)
 で検索可能。
(ねむねむ) 2021/06/30(水) 14:05

 縦、および縦横(A:B2等)の結合セル
 上記及び
 SearchOrder:=xlByColumns, _
 でも検索できず。
(ねむねむ) 2021/06/30(水) 14:07

 >また,A1単体のセルとそれ以外のいずれかのセルに同じ検索値が入っている場合,
 >A1単体セルではないセルの値が返ってくることも確認しました。これも仕様でしょうか?

(ねむねむ) 2021/06/30(水) 14:12


 こちらについてはAfterを省略した場合検索範囲の一番左上のセルの次から検索すると
 なっているので仕様ということになる。
(ねむねむ) 2021/06/30(水) 14:13

ねむねむさん

テストありがとうございます。
こちらでも横の結合セルの検索は可能でした。

しかし,それ以外は検索できないみたいですね。

自作の汎用モジュールにFind関数を組み込んでいるのですが,
今回のこともあるのでFindは使わない方がよさそうかな・・・

>Afterを省略した場合検索範囲の一番左上のセルの次から検索すると
>なっているので仕様ということになる。

仕様なのですね勉強になりました。
(no_name) 2021/06/30(水) 14:21


[[20170417102019]] 
 >『ユーザーフォームでリストボックス検索から更新ま』(けんとくん)

 >(β) 2017/04/18(火) 09:57

 以前、上のトピックで、βさんが「テーマと関係のないけども・・」、
 結合セルがあるシート内でFindメソッドを使う上での注意点(バグ)を話されていました。

 今回は、それ以外にもバグがあったんだなぁと認識させられた気分です。

 しかし、何か根源は一緒のバグではないかと言う気がします。
 共通点は「After」と「ヒットすべきセルの位置」が何か関係していそう。

 そこで飛んでもない位置にあるセルをAfterに設定したらどうなるかと思いました。

 つまり、これ
      ↓
 After:=Cells.SpecialCells(xlCellTypeLastCell).Offset(1,1))

 結果はいい線いってました。 (XL2010) 私だけ?

(半平太) 2021/06/30(水) 17:40


半平太さん

情報ありがとうございます。勉強になりました。

Find関数は便利ですが,今回のことや過去ログのなどのこともありますし,
そのほかも日付検索や引数の設定で気を使うことが多いですよね。

必要になれば別トピックでFindに代わるプログラムを相談しようと思います。
(no_name) 2021/07/01(木) 08:32


検索の開始位置の話でしたら、Findメソッドのヘルプの「After引数」の項に
割と詳し目に書いてあったような。
(別の話だったら失礼。)
(γ) 2021/07/01(木) 08:46

 Find、FindNextを使う時、従来から知られているバグは↓

 【検索文字列がシート上に1か所だけで、かつ、それが結合セルだった場合、
  最初に発見したセルをFindNextで再発見できない】

 今回、実在しているにも拘わらず、第一回目の発見すらできないケースがある、
 と言うことで、追加対応が必要と私は認識した、と言うことです。

  Sub test()
     Dim c As Range
     Dim f As Range

     Set c = ActiveSheet.Cells.Find(What:="aa", LookAt:=xlWhole, _
             After:=Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 1))  '初回の発見を確実にするため

     If c Is Nothing Then
         MsgBox "見つかりません"
         Exit Sub
     End If

     Set f = c

     Do
         MsgBox c.Address & "に見つかりました"
         'c を使ってなにがしかの処理
         Set c = ActiveSheet.Cells.FindNext(c)
         If c Is Nothing Then            '(従来の対策)1つ見つかったケースでもこのチェックが必要
             Exit Do
         End If
     Loop While c.Address <> f.Address
  End Sub

(半平太) 2021/07/01(木) 10:53


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.