• 締切済み

VBAで時刻で検索をしたいのですが

VBA全くの初心者です。 時刻が入力されているB列で、例えば、 19:**のデータが入っているセルが、何行目にあるか、を知りたいと思っています。**としているのは、複数のファイルを扱うため、分(**)の値が特定できないからです。 Find を使い、 Dim n As Integer n = Range("B:B").Find("12:").Row で、12時台の行は取得できました。。 ところが、13時以降は、うまくいきません。 どのようにすればよいのでしょうか。。 初心者のため、質問の仕方も、うまくなくてすみません。。 どなたかお教えくださいましたら、とてもありがたいです。。

みんなの回答

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

例えば、データとして 「2008/10/20 13:33:33」 入力されていて 表示形式が、「遅刻」→13:30 又は 「日付」→2008/10/20 13/33 又は 「ユーザー定義」→ yyyy/m/d h:mm の場合は問題ないと思います。

yukae_001
質問者

お礼

ありがとうございます。 仰るとおりでした。 うまくいかなかったのは、1行目にタイトルが入っていた、という、とても単純な理由でした。。すみません。。 おかげさまで、うまく検索できるようになりました。 ありがとうございました!

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

以下の方法では、如何でしょうか。 効率は良くないですけど、 C列に遅刻を文字列として展開してから検索する方法 検索してから、C列をクリアします。 Sub test()   Dim n    As Integer   Dim d    As Date   Dim mR   As Long   Dim wR   As Long   Dim fTime  As String   '   fTime = "13:"   With ActiveSheet     mR = .Cells(Rows.Count, "B").End(xlUp).Row     For wR = 1 To mR       d = .Cells(wR, 2)       .Cells(wR, 3) = "'" & d     Next     n = Range("C:C").Find(fTime).Row     MsgBox n     Range("C:C").ClearContents   End With End Sub

yukae_001
質問者

お礼

コードも作っていただいて、本当にありがとうございます! 早速やってみました。 "'"をつけると、表示どおりの文字列テキストでコピーしてくれる、ということですね。とても勉強になります。 そして。。 これも私の理解不足で本当に申し訳なかったのですが、 実は、セルBは、時刻表示になっているのですが、データとしては年月日付も入っていました。 すると、 d = .Cells(wR,2) のところで、「型が一致しません」、と止まってしまいました。 試しに、時刻入力値だけの場合でやると、教えていただいたコードでとてもうまくいきました。 型は、dateでいいのでは?と思ったのですが、 どう変えれば、年月日時刻データでもうまくいくのかがわからず。。 重ねて質問してしまい、すみません!

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こんにちは。 セルの表示形式の問題だと思います。 B列を文字列にして時刻を入力してみてください。

yukae_001
質問者

お礼

ご回答頂きありがとうございます。 こちらの説明不足ですみません。 扱うファイルは、機械が自動で入力した結果のファイルのため こちらで、入力形式を変えることができません。 また、できれば、時刻形式のまま、検索ができるようになってほしいのですが。。

関連するQ&A