- ベストアンサー
マクロでの検索方法とエラー対策について
- マクロでの検索方法についてお教えします。24時間表示のデータが並んでいる場合、9:00:00を検索すると21:00:00もヒットしてしまうことがあります。この問題を解決する方法をご紹介します。
- セルの書式はyyyy/m/d h:mmで表示は2013/8/29 9:00です。セルには2013/8/29 9:00:00、2013/8/29 10:00:00などが入っています。1時間ごとに24時間500日くらいのデータがA列にあります。21:00:00にヒットしないようにする方法を教えてください。
- また、マクロの実行中に「オブジェクト変数またはWithブロック変数が設定されていません」というエラーが発生することがあります。このエラーの対策についてもアドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
2パターン挙げてみます。 Sub Re8289389() Dim r As Range For Each r In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) If r.Text Like "* 9:00" Then ' ' 見つかった場合の処理 Debug.Print r.Row End If Next End Sub Sub Re8289389j() Dim r As Range For Each r In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) If IsDate(r.Value) Then If Hour(r.Value) = 9 Then ' ' 見つかった場合の処理 Debug.Print r.Row End If End If Next End Sub
その他の回答 (2)
- cj_mover
- ベストアンサー率76% (292/381)
Findメソッドを使いたかったのですね。 それなら、 Sub Re8289389c() Dim c As Range Dim n1stRow As Long With Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) Set c = .Find(What:=TimeValue("9:00"), After:=.Cells(.Cells.Count), _ LookIn:=xlFormulas, LookAt:=xlPart) If Not c Is Nothing Then n1stRow = c.Row Do ' ' 見つかった場合の処理 Debug.Print c.Row Set c = .FindNext(c) Loop While Not c Is Nothing And c.Row > n1stRow End If End With End Sub
お礼
早速の回答ありがとうございました。 Sub Re8289389()のパターンで希望がかないました 色々なパターンのご教授ありとうございました。
- sora1515
- ベストアンサー率58% (54/92)
あまり確認していませんが以下でどうでしょうか。 Sub test() Dim c As Range For Each c In Range("A1:A30") '検索範囲 If Hour(c) = "9" Then '9時検索 MsgBox (c.Row & "行目で見つかりました") End If Next c End Sub ※見易さの為半角スペースを全角にしております。
お礼
cj_mover様の回答で無事解決できました これに懲りずお教えくださいますようお願いいたします。 ありがとうございました。
補足
早速の回答ありがとうございます。 さっそくテストしましたがうまくいきません 実行時エラー'13': 型が一致しません。 というエラーになります どう対処すればよいのかわかりません A列の日時データをいじってみたのですが うまくいきませんでした お手数をおかけしますがよろしく お願いいたします。
お礼
早速の回答ありがとうございました。 Sub Re8289389()のパターンで希望がかないました 色々なパターンのご教授ありとうございました。