マクロでの検索方法とエラー対策について
- マクロでの検索方法についてお教えします。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ブロック変数が設定されていません」というエラーが発生することがあります。このエラーの対策についてもアドバイスをお願いします。
- ベストアンサー
マクロでの検索の仕方をお教えください。
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 ブロック変数が設定されていません。 というエラーになるときもありどうすればよいのかわかりません。 どうかよきアドバイスをお願いいたします。
- yama0192
- お礼率70% (56/80)
- Excel(エクセル)
- 回答数3
- ありがとう数3
- みんなの回答 (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列の日時データをいじってみたのですが うまくいきませんでした お手数をおかけしますがよろしく お願いいたします。
関連するQ&A
- エクセル マクロ:部分一致検索
教えてください。 sheet1のA列に時間データがあります。A列は書式設定でhh:mm:ss.00にしています。 sheet2のA1に時間を表示しており書式設定でhh:mm:ssにしています。 sheet2のA1と部分一致する時間を、sheet1のA列から検索するマクロを作成しています。 (複数ある場合は初めに該当するセルの行を表示) sheet2に下記のコードを入力しており、実行すると「オブジェクト変数またはwithブロック変数がされていません」と表示され困っています。 ご教授のほどよろしくお願い致します。 Sub 検索() Dim Jikan As Date Dim Row1 As Integer Jikan = Sheets("sheet2").Cells(1, 1).Value Row1 = Sheets("sheet1").Range("A:A"). _ Find(What:=Jikan, LookAt:=xlPart).Row MsgBox Row1 End Sub
- ベストアンサー
- Excel(エクセル)
- 【Excelマクロ】 文字列から日付型へ変換したい
AccessデータをExcelへ貼り付ける際、Access側の書式設定がyyyy/mm/ddでしたらExcelでも日付型として認識してくれますが、yyyy/mm/dd(aaa)と曜日を表記したデータはセルの書式を日付型にしても文字列として貼り付けられてしまいます。 ExcelのDATEVALUE関数を使用すれば日付型へ変換できるのは存じていますが、列/行を挿入することができません。 日付型へ変換できるマクロはありませんか? 変換したいセル番地は都度変動しますので、変換したいセル(複数列/行)を選択した状態からマクロを実行したいです。
- ベストアンサー
- Excel(エクセル)
- セルの日時から時間のみ マクロ
日時の時間のみを照らし合わせて判定するマクロを教えて下さい。 添付画像のC列、D列に日時が入っています。 表示形式はユーザー定義でyyyy/m/d h:mmです。 今回行いたいのは例えば C12セルとD12セルの時間 15:45(C12セル)と15:55(D12)であればセルI12に朝礼と表示したいです。 日付は見ずに時間がこの並びになっていたら、I列に文字を表示したいということです。 C17とD17も同じです。 C列とD列の関係で日付は考えず時間で照らしあわせるには どのようなコードを書けばよいでしょうか?
- ベストアンサー
- Excel(エクセル)
- yyyy/mm/ddの日付に一括変換するマクロ
[セルの書式設定] の [表示形式]が標準(日付ではない)で単なる文字列となっている「mm-dd-yyyy」や「mm/dd/yyyy」のデータをマクロで「yyyy/mm/dd」の日付データに一括変換するマクロを教えてください。 たとえば、日付データが列Aにある場合にはDATE関数で、 =DATE(RIGHT(A2,4),LEFT(A2,2),MID(A2,4,2)) でも変換可能ですが、対象ファイルが多数、各ファイルにも対象の列が多数、そしてファイルの更新頻度も多いため、DATE関数を使用することは現実的ではない事情があります。 このためマクロを使用して処理させたいです。 添付のサンプルの例で一括変更するマクロを教えてください。 なお、Excelは2007を使用しています。
- ベストアンサー
- オフィス系ソフト
- 【Excel】 表示形式のyyyyを2005で表示したい。
こんにちは E列は、他のセルを参照し、その内容から日時を表示しています。 (E列の表示形式は「m/d h:mm;@」です。) これを「yyyy/m/d h:mm;@」に変更したところ参照するセルに 年のデータが無いために先月の分が 2006/12/31 12:30 というふうになってしまいます。 これを今から「yyyy/m/d h:mm;@」に変更し2005/12/31 12:30 にするにはどうしたら良いでしょうか。
- ベストアンサー
- オフィス系ソフト
- yyyy/m/d h:mmという表記をyyyy/mm/ddにしたい
エクセルに関する質問です。よろしくお願いします。 シート上でyyyy/m/d h:mm(例えば2009/5/1 3:04や2009/6/15 12:04のように)で表記されている箇所を、時間表記を切って「yyyy/mm/dd」だけにしたいと考えています。 「セルの書式設定」の「表示形式」タブで設定すれば表示上は「yyyy/mm/dd」になるのですが、データ上は「h:mm」が残っています。 そのためピボットテーブルで「yyyy/mm/dd」の情報をベースに、集計しようとすると「h:mm」のデータが邪魔になってしまいます。 何とかなりませんでしょうか? よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- Excelマクロで不要な行を繰り返し処理で削除する
下記の図表【事前】のA列に時間(シリアル値)が入力されていますが、 これをマクロを使って不要な時間帯のデータを行ごと削除したいです。 それを実行するためのマクロをご教示頂けますでしょうか? 削除対象の条件 ・9:00:00~18:00:00以外の夜間や早朝の時間帯は削除する。 その他 ・データが入力されている行数分繰り返し処理 ・秒数、分数は全て0 ・列は3列(B、C列は任意) ・Excelのバージョンは2007 【事前】 A B C 1 yyyy/mm/dd 01:00:00 ※削除対象 2 yyyy/mm/dd 23:00:00 ※削除対象 3 yyyy/mm/dd 09:00:00 4 yyyy/mm/dd 15:00:00 5 yyyy/mm/dd 17:00:00 6 yyyy/mm/dd 19:00:00 ※削除対象 7 yyyy/mm/dd 04:00:00 ※削除対象 【事後】 A B C 1 yyyy/mm/dd 09:00:00 2 yyyy/mm/dd 15:00:00 3 yyyy/mm/dd 17:00:00
- ベストアンサー
- Visual Basic
- ユ-ザ-定義のセル内容を文字列に変換できますか?
セルの書式設定で ユ-ザ-定義を"yyyy/m/d h:mm:ss" としてあるセルが有ります。 セルの値はユ-ザ-定義通り"2007/3/20 8:00:00"と表示されています。 この表示を文字列に変換し 関数 CONCATENATEで他の文字列 と結合したいのですがどの様にマクロを組めば良いのでしょうか やりたい作業は 元の値 セルの書式が日付で "1997/3/4 13:30" セルの値は"2007/3/20 8:00"ですが、内容は秒まで入っています これを、秒まで表示させたいのでユ-ザ-定義を変え"2007/3/20 8:00:00"と表示させます 次に、文字"<= もしくは>="と結合させフィルタ-オプションの参照値としたいのですが セルの内容が指数として表示されてしまいうまく結合できません マクロの初心者ですが、ご指導宜しくお願い致します
- ベストアンサー
- オフィス系ソフト
- Excelのマクロでデータ形式を容易に変更する方法
2年ぶりにExcelのマクロについて 質問させていただきます。 他の人がExcelで作ったデータを取り込んで使いたいのですが マクロでデータ形式を変換する適切な方法を教えてください。 他の人が作ったExcelファイルで 例えばセルA1に H28/04/01 というデータがあったとします。 画面に表示される内容も セルに入力されている内容も どちらも H28/04/01 です。 ちなみに、セルの書式設定を確認すると 「標準」となっているのですが これが「文字列」だとしても 以下に記す内容は おそらく同じだと思います。 このデータを、分かりやすいように セルに入力されている内容は 2016/4/1 となるようにして しかも画面に表示される内容は 平成28年4月1日 となるようなマクロを組みたいのです。 Cells(1, 1) = Format(Cells(1,1),"yyyy/m/d") Cells(1, 1).NumberFormatLocal = "ggge年m月d日" と作ってみましたが このマクロを実行すると 2016/4/1 と表示されす。 そして、この状態から 改めてマクロを実行すると ようやく 平成28年4月1日 と表示されます。 これを1回のマクロ実行で済ませるためには どのように組んだらよいのでしょうか。 なお、上記の内容は Excel2010 でも Excel2003 でも同じでした。 マクロについては、まだまだ素人だと 痛感しております。 回答をよろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- エクセル マクロ 日付の検索
エクセル2000にて検索のマクロを作っています。 オブジェクト変数またはwithブロック変数が設定されていません。とエラーがでます。 どなたか助けていただけませんか? ”メニュー”シートのAボタンを押すと”スケジュール”というシートの今日の日付のセルにカーソルが飛ぶようにしたいと思っています。 ”スケジュール”シートのR2セルに=today() 関数が入っています。 A列に日付が入っています。 Sub Macro3() Dim r2 As String Application.ScreenUpdating = False Sheets("スケジュール").Select r2 = Range("R2").Value Selection.Find(What:=r2, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate End Sub
- ベストアンサー
- オフィス系ソフト
お礼
早速の回答ありがとうございました。 Sub Re8289389()のパターンで希望がかないました 色々なパターンのご教授ありとうございました。