プロが教えるわが家の防犯対策術!

自分なりに検索してみましたが、解決策を発見できませんでしたので質問させて下さい。

Sheet1・・・セルA1~A5の任意の場所に"5"を入力します。

標準モジュールに、以下のコードを記入しました。

Sub test()
Dim i As Integer
i = Sheets("Sheet1").Range("A:A").Find(What:="5").Row
MsgBox i
End Sub

見ての通り、A列全体から、1行目を起点に"5"を上から順に検索し、
最初に見つかった行ナンバーをメッセージボックスに表示するマクロです。

このマクロを実行した際、以下のようなことが起こりました。


"5"を入力するセル  /  MsgBoxが表示する行番号

(1) 1、2、3行目  /   2
(2) 1、3行目    /   3
(3) 1行目      /   1
(4) 3、4、5行目  /   3


このように、(3)「1行目のみに検索対象が存在する場合」及び
(4)「2行目以降に複数件、検索対象が存在する場合」には
最初に見つかったセルの行番号を正しく返してくれるのですが、

(1)(2)「1行目とそれ以外の行に検索対象が存在する場合」には、
「2行目以降」で最初に見つかったセルの行番号が返ってきます。

これはEXCEL VBAの仕様なのでしょうか?

社内で利用するために作成したツールの一部に上記コードを組み込んでおり、
想定した通りに動いてくれずに困っております。

やりたいことは、A列全体から指定のキーワードが存在するセルを検索し、
1行目も含めて、最初に見つかったセルの行番号を取得することです。

ご助言頂けますよう、よろしくお願いします。

A 回答 (1件)

Sub test2()


'Dim i As Integer
Dim i As Long 'の方が宜しいかも
With Sheets("Sheet1")
i = .Range("A:A").Find(What:="5", After:=.Range("A" & Rows.Count)).Row
End With
MsgBox i
End Sub

After:= で検索開始する位置を指定します。
⇒実際には指定セルの次に見つかったセルですので、A列の最終行を指定しておくとこの場合A1を最初に見つけてくれます。
    • good
    • 0
この回答へのお礼

ありがとうございます、よく分かりました。
今更ですが、VBAヘルプに記載されていましたね・・・
また何かありましたらよろしくお願いします。

お礼日時:2009/08/20 10:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A