- 締切済み
VBAで時刻で検索をしたいのですが
VBA全くの初心者です。 時刻が入力されているB列で、例えば、 19:**のデータが入っているセルが、何行目にあるか、を知りたいと思っています。**としているのは、複数のファイルを扱うため、分(**)の値が特定できないからです。 Find を使い、 Dim n As Integer n = Range("B:B").Find("12:").Row で、12時台の行は取得できました。。 ところが、13時以降は、うまくいきません。 どのようにすればよいのでしょうか。。 初心者のため、質問の仕方も、うまくなくてすみません。。 どなたかお教えくださいましたら、とてもありがたいです。。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- pkh4989
- ベストアンサー率62% (162/260)
例えば、データとして 「2008/10/20 13:33:33」 入力されていて 表示形式が、「遅刻」→13:30 又は 「日付」→2008/10/20 13/33 又は 「ユーザー定義」→ yyyy/m/d h:mm の場合は問題ないと思います。
- pkh4989
- ベストアンサー率62% (162/260)
以下の方法では、如何でしょうか。 効率は良くないですけど、 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
お礼
コードも作っていただいて、本当にありがとうございます! 早速やってみました。 "'"をつけると、表示どおりの文字列テキストでコピーしてくれる、ということですね。とても勉強になります。 そして。。 これも私の理解不足で本当に申し訳なかったのですが、 実は、セルBは、時刻表示になっているのですが、データとしては年月日付も入っていました。 すると、 d = .Cells(wR,2) のところで、「型が一致しません」、と止まってしまいました。 試しに、時刻入力値だけの場合でやると、教えていただいたコードでとてもうまくいきました。 型は、dateでいいのでは?と思ったのですが、 どう変えれば、年月日時刻データでもうまくいくのかがわからず。。 重ねて質問してしまい、すみません!
- pkh4989
- ベストアンサー率62% (162/260)
こんにちは。 セルの表示形式の問題だと思います。 B列を文字列にして時刻を入力してみてください。
お礼
ご回答頂きありがとうございます。 こちらの説明不足ですみません。 扱うファイルは、機械が自動で入力した結果のファイルのため こちらで、入力形式を変えることができません。 また、できれば、時刻形式のまま、検索ができるようになってほしいのですが。。
お礼
ありがとうございます。 仰るとおりでした。 うまくいかなかったのは、1行目にタイトルが入っていた、という、とても単純な理由でした。。すみません。。 おかげさまで、うまく検索できるようになりました。 ありがとうございました!