- ベストアンサー
エクセルマクロ非表示セル検索法について
Findメソッドでセルを検索し、行及び列番号を求めたいのですが、セルを非表示にしておくと検索できず求めることが出来ません。 非表示セルも可能にするにはどうすれば良いのですか? 列番号 = Cells.Find("キー").Column ' 失敗 列番号 = Rows(1).Find("キー").Column ' 失敗
- みんなの回答 (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さんも上記を検証していただけるといいですが。 以上です。
その他の回答 (2)
- watabe007
- ベストアンサー率62% (476/760)
私の環境(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
お礼
ありがとうございます。 特殊なセルではありません。 メニューの書式で、列→表示しない にしてあるだけです。
- myRange
- ベストアンサー率71% (339/472)
もっといい方法があるやもしれませんが、当方が考えてみた方法を2つほど。 (方法1) 検索前に非表示行、列を表示して検索し、検索後に再度非表示にする (方法2) Cells.Find("キー")でヒットしなかった場合は、 非表示の行、列のセルをひとつずつチェックする 現時点ではどういう方法を望んでいるか分からないので コードのアップは控えておきます。 以上です。
お礼
ありがとうございます。 そもそも、非表示セルを検索しない原因は、 Findメソッド側でしょうか? それともRange オブジェクト側でしょうか? メソッドorオブジェクトの変更で解決不可なら、 (方法3) Findメソッドの自作、つまり、対象セル範囲を検索する関数の作成 を考えています。 理論的に最も高速なのは 方法1~3 どれでしょうか?
お礼
ありがとうございました。 早速トライしてみます。