- ベストアンサー
Excel VBA 時刻でのDo~Loopの抜け方
いつもお世話になっております。 Excel VBA 時刻でのDo~Loopの抜け方を教えてください。 下記のような記述で、時刻(時間)の条件を満たした時 ループを抜けるように設定したのですが、 時刻が「8時」とか「15時」というように 時間でしか対応しません。 「何時何分」という設定にも対応するためには どのように記述すればよいか教えてください -------の部分は何らかの記述が入っているものとしてください。 ↓このように記述しました Do Until MyHour > 15 MyHour = Hour(Now) ------------------- -------------------- -------------------- Loop どうぞ、よろしくお願いします。
- hasmiya
- お礼率30% (32/106)
- オフィス系ソフト
- 回答数4
- ありがとう数2
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。Wendy02です。 >Sheets("a").select >for J=1 to 10000:next j >Sheets("b").select >for J=1 to 10000:next j >のように、シートの表示を切り替え >画面表示を変えるようにしています。 ということは、シートの全体の監視ですか? コードは、VBのスタイルですね。 画面の切り替えをずっとしていくのですか? for J=1 to 10000:next j これですと、1秒以内のような気がします。 For Each sh In Worksheets は、全部のワークシートですので、もし、そうでない場合は、For Each sh in Worksheets(Array("a","b"))として、配列にしてあげます。 今は、ちょっと、思いつく方法を書いてみただけで、もう少し、違った方法があったような気がします。一応、以下のものは試験はしてあります。 Sleep は、Wait よりも負担が少ないので使いました。 '-------------------------------------------------- Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long) Sub ShChange() Dim sh As Worksheet Dim SettingTime As Date Dim AtNow As Date SettingTime = TimeValue("16:15:00") AtNow = Now() - Int(Now) Do Until AtNow > SettingTime AtNow = Now() - Int(Now) For Each sh In Worksheets DoEvents sh.Select Sleep 2000 '1000 =1秒 Next sh Loop End Sub
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 まあ、それそのものは、以下のようにすればよいのですが……。 それから、"15:51" というような文字列比較は、うまくいきませんね。 文字列は、"2" > "12" が、True です。 Dim SettingTime As Double '設定時間 Dim AtNow As Double '時間 SettingTime = TimeValue("15:51") AtNow = Now() - Int(Now()) Do Until AtNow > SettingTime AtNow = Now() - Int(Now()) ------------------- -------------------- -------------------- Loop しかし、全体的には、疑問の残る余地が大きいです。 OnTime メソッドを上手に使ったほうがよいのではないかと思いますし、Loop を繰り返せば、Excelはメモリ喰いなので、PC自体の負担が大きいのではないかと思います。 Do Until ..... >------------------- >-------------------- >-------------------- >Loop 「線の中」で何をしているかが問題です。長い時間を使うというのは、全体的に、イベントの代わりじゃないかと思います。その場合は、Do ~ Loop じゃないのですね。部分的に質問を出されると、全体的には、間違った解答をしているのではないか、不安が残ります。
お礼
丁寧な回答ありがとうございました。 Do~Loop の中では、 Sheets("a").select for J=1 to 10000:next j Sheets("b").select for J=1 to 10000:next j のように、シートの表示を切り替え 画面表示を変えるようにしています。 Do~Loop このような場合の使い方は適切ではないのでしょうか? ご教授お願いします
- Ce_faci
- ベストアンサー率36% (46/127)
本題を間違えました。 Sub 時刻で処理() MyHour = "15:51" Do Until Hour(Now) & ":" & Minute(Now) > MyHour MsgBox "節分" Loop End Sub 15:51を適当に変えてください。 PC自体の時計(日付と時刻のプロパティ)を操作すると確認し易いと思います。
- Ce_faci
- ベストアンサー率36% (46/127)
こんばんわ MyHour=timevalue("15:51") のことですか。
関連するQ&A
- エクセル VBA do loop if then
いつもお世話になっております。 エクセルVBAからの質問です。 do until ----- if --- then ---- ---- ---- loop else --- loop このように loop とか next が二個になるのはエラーらしいですが、 ○○があれば××を通して△△へループする ○○がなければ、すっ飛ばして△△へループする このような分岐をともなう繰り返しコードはどうやって作るとよろしいですか。 おっさんサラリーマンにも分かりやすくぷりーず。
- ベストアンサー
- オフィス系ソフト
- Do..Loopステートメントの使い方について
現在、入門書を画面で確認しながら ExcelVBAの勉強をしています。 Do...Loopで躓いてしまいました。 Do...Loopステートメントの種類は 条件を満たすまでループするもの Do Until...Loop(ループの前で条件判断) Do...Loop Until(ループの後で条件判断) 条件を満たす間はループするもの Do While...Loop(ループの前で条件判断) Do...Loop While(ループの後で条件判断) とあって、 例えば、A1からA7まで文字が入力されていて 空白のセルになるまで太文字にするとしたら、 ループの前に条件判断していると A1が空白だと処理はされず ループの後で条件判断すると A1が空白でも処理はされる とありました。 とすると、 条件判断はループ後にした方が良いと言う事なのでしょうか。 (空白でも処理してくれるので) 自分が処理したいものが ループ「後」にするのか又は ループ「前」にするのか どのように判断すれば良いのかと言うことと、 また、 条件を満たすUntil(まで)とWhile(間) どちらを使用すれば良いのかの判断方法もわかりません。 超初心者の質問内容で申し訳ありません。 VBAって面白いなぁと思い始めたところで なんとか理解したいので 教えていただけると大変助かります。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel VBA のDo Until Loopについて
こんばんは Excel VBAの初心者です。 Do Until Loopを使って B列の値が変わるところ(下記の表だと、空白からコスモスに変わる、4行目。コスモスからチューリップに変わる6行目。チューリップから菊に変わる8行目。)に行を挿入させたいと思い、下記のマクロを組んだのですが、Do Until Loopが理解できませんでした。 どうしたら良いのか教えて頂けないでしょうか。 宜しくお願い致します。 Excelのシート B1 項目 B2 空白 B3 空白 B4 コスモス B5 コスモス B6 チューリップ B7 チューリップ B8 菊 Sub 行の挿入() Dim y As String Cells(2, 2).Select y = Cells(2, 2).Value Do Until Cells(2, 2).Value <> y ActiveCell.Offset(1).Select Selection.EntireRow.Select Selection.Insert shift:=xlDown Loop End Sub
- ベストアンサー
- その他(プログラミング・開発)
- 2重のDo~Loopは?
Excel VBAですが、A列にデータが入っています。 A列のデータが変わるまで 処理1 を実行し、変われば 処理2 を実行する。データがなくなれば終了する方法が分りません。宜しくお願いします。 i = 2 Do Until Cells(i, 1) = "" Do Until Cells(i, 1) <> Cells(i - 1, 1) 処理1 Loop 処理2 Loop
- ベストアンサー
- Visual Basic
- Do Loopをキーボードで抜けるには
エクセルVBAでDo Loopを使って繰り返し表示するプログラムを組んでいます。 このループを終わらせるにはEscを押せば強制終了しましたがキーボードの任意のキーで抜けるもしくは終了させる方法を教えてください。 エクセルのバージョンは「2007」です。
- ベストアンサー
- Visual Basic
- VBA Do Until Loopでエラー
VBAは全くの素人です。 マクロの記録とInterNetでVBAコードを探し、下記のように記しました。 VBAのデバッグ&ステップインで(動作)確認するのですが、素人の悲しさか、Do Until IF の行で「コンパイル&構文エラー」に引っ掛かり先に進めません。 どの様に修正したらよいのかnetを探すのですが見つかりません。(探し方が足りない?) コードの右側に ‘‥‥やりたい事のコメントを記しています。 どの様にコードを修正したらよいのか、ご指導願えませんでしょうか?。 他の部分についてもご指導頂けると助かります。 Sub 練習1() Dim i As Integer '‥‥変数(繰り返し回数のカウント) iを宣言 i = 0 '‥‥変数iをリセット(0)にする(繰り返し回数のカウント) Range("$F$8").Select ActiveCell.FormulaR1C1 = 0 '‥‥F8をリセット(0)にする Dim waittime As Variant '‥‥待ち時間設定宣言 waittime = Now + TimeValue("0:00:10") '‥‥待ち時間10秒に設定 Do Until If Range("$G$8").Value = "Out" Then '‥‥「Goodになるまで繰り返しなさい」 Calculate ‘‥‥繰り返し計算せよ Else: Range("$G$8").Value = "Good" ‘‥‥Goodになれば繰り返し(Loop)完了 IF Range("$G$8").Value = Interior.colorIndex = 36 '‥‥$G$8が"Good"ならばセル色を36にする '尚、G8セルの計算式は=IF(AND($I$25="OK",$I$26="OK",$I$27="OK",$I$28="OK",$I$29="OK"),"Good","Out") Range("F8").Select ActiveCell.FormulaR1C1 i = i + 1 '‥‥変数iを1増やす(繰り返し回数のカウント) waittime = Now + TimeValue("0:00:10") '‥‥待ち時間10秒に設定 End If Calculate Loop '‥‥G8が”Good” になればVBA終了 Range("G8").Select End Sub
- 締切済み
- Visual Basic
- Exit Doで二つのloopを抜けるには?
Do Do For Each If 値 = "" Then Exit Do End If Next Loop Until 条件1 Loop Until 条件2 のようなネストをした場合、Exit Doでloopを抜ける時、条件1と条件2のどちらに移動するのですか? もし条件1に移動する場合、条件2を抜けたいのならどうすればいいのでしょうか? Exit Do Do みたいな事がしたいです。
- ベストアンサー
- その他MS Office製品
- VBA Do…Loopについて
お世話になっております。 ただいま、アクセスVBAにてDo…Loopの練習をしております。 テキストボックス1に数字を入れ、コマンドボタンを押すと入力した数字が1ずつ引かれる形でテキストボックス2に入るようにしたいです。 (テキストボックス1に「8」→テキストボックス2に「87654321」のように) Dim I As Variant I = Me.text1.Value Me.text2.Value = Me.text1.Value Do Until I = 1 I = I - 1 Me.text2.Value = Me.txt2.Value & I Loop で動作そのものはするのですが、doloop前の「Me.text2.Value = Me.text1.Value」を正さないといけないようです。(課題です) これがないと入力された数字そのものが入らなくなってしまうのですが… よろしくおねがいします。
- ベストアンサー
- Visual Basic
- 【VBA】DoUntil Loopを1度のみ実行
いつもお世話になっております。 Excel2003を使用しております。 「この条件になるまで続行」というのは Do Until Loop だと思うのですが、 ループをしたくないけれど Do Until Loop を利用したい場合(条件になったら即終了したい) Do Until Flag=True 実行したいこと 実行したいこと2 実行したいこと3 Exit do Loop また、やりたいこととしては、 FlagがTrue になったら、プロシージャから抜けたいと思っています。 その場合は、 Do Until Flag=True 実行したいこと 実行したいこと2 実行したいこと3 Exit do Loop If Flag=True Then Exit sub End if このように、別々?に書く以外に方法はないでしょうか? 出来れば、簡単なIF文で実行できないかと思ったのですが… 話がごちゃごちゃしていて分かりにくいので、質問事項のみまとめますと、 ● 条件になったら終了させる。 これは、Do~Loop 、For Next のみの動作でしょうか? ● ループから抜けると同時にSubを終了させるには、ループの外にIF文を書くしかない? 以上、よろしくお願い致します。
- 締切済み
- Excel(エクセル)
- エクセル VBA
エクセル VBA 指定セルがNULLじゃない場合、セルを横に1つずつずらしていきNULLのセルで抜けるVBを作りたいです。 Do Until IsNull???? loop
- ベストアンサー
- Visual Basic
お礼
お礼が遅れました。ありがとうございました。うまく動作させることが出来ました。