• ベストアンサー

エクセルマクロ非表示セル検索法について

Findメソッドでセルを検索し、行及び列番号を求めたいのですが、セルを非表示にしておくと検索できず求めることが出来ません。 非表示セルも可能にするにはどうすれば良いのですか? 列番号 = Cells.Find("キー").Column  ' 失敗 列番号 = Rows(1).Find("キー").Column ' 失敗

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

回答1、myRangeです。 >そもそも、非表示セルを検索しない原因は、 >Findメソッド側でしょうか? >それともRange オブジェクト側でしょうか? Findメソッドでしょう。 ま、それは置いといて。。。。 色々テストしてみたところ、非表示行、列が検索できない原因が分かりました。 当方もこれは知らなかった。。。(^^;;; 原因は次のようなことのようです。 ----------------------------------------------------- ×引数LookAtの定数がxlValues(値)ではヒットしないが   Cells.Find("あいう", , xlValues, xlWhole).Column ○xlFormulas(数式)ではヒットする   Cells.Find("あいう", , xlFormulas, xlWhole).Column -------------------------------------------------------  xlFormuLasが値でも式でも検索できるのは分かる気もしますが、 なぜ、非表示行、列を検索できるのかはちょっと??? おそらく、仕様でしょうね。 ●で、今回の回答は、LookAtの定数をxlFormulasにする、ということで。 ●●最重要●● 以下は、Findメソッドのヘルプにも書いてあることですが 質問者のコードのように引数を省略すると 引数LookAt,LookInなど以前の設定をそのまま使うことになります。 これは、エクセルの編集>検索 で検索してもそれがVBAのFindにも残るということです。 なので、LookAt,LookInなどは毎回設定するようにしないといけません。 詳しくはヘルプ参照のこと。 ■テストして回答を書いてるうちにwatabe007さんの回答がついてました watabe007さんも上記を検証していただけるといいですが。 以上です。  

essentieel
質問者

お礼

ありがとうございました。 早速トライしてみます。

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

私の環境(WindowsXp Excel2002)では非表示セルも検索されますが 結合セルなど特殊なセルですか? Sub Test()   Dim myRang As Range   Set myRang = Cells.Find("キー")   If Not myRang Is Nothing Then     MsgBox "列番号:" & myRang.Column & _       vbCrLf & "行番号:" & myRang.Row   Else     MsgBox "「キー」は見つかりませんでした。"   End If End Sub

essentieel
質問者

お礼

ありがとうございます。 特殊なセルではありません。 メニューの書式で、列→表示しない にしてあるだけです。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

もっといい方法があるやもしれませんが、当方が考えてみた方法を2つほど。 (方法1) 検索前に非表示行、列を表示して検索し、検索後に再度非表示にする (方法2) Cells.Find("キー")でヒットしなかった場合は、 非表示の行、列のセルをひとつずつチェックする 現時点ではどういう方法を望んでいるか分からないので コードのアップは控えておきます。 以上です。    

essentieel
質問者

お礼

ありがとうございます。 そもそも、非表示セルを検索しない原因は、 Findメソッド側でしょうか? それともRange オブジェクト側でしょうか? メソッドorオブジェクトの変更で解決不可なら、 (方法3) Findメソッドの自作、つまり、対象セル範囲を検索する関数の作成 を考えています。 理論的に最も高速なのは 方法1~3 どれでしょうか?

関連するQ&A