アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
Excel VBA 時刻でのDo~Loopの抜け方を教えてください。
下記のような記述で、時刻(時間)の条件を満たした時
ループを抜けるように設定したのですが、
時刻が「8時」とか「15時」というように
時間でしか対応しません。
「何時何分」という設定にも対応するためには
どのように記述すればよいか教えてください
-------の部分は何らかの記述が入っているものとしてください。

↓このように記述しました

Do Until MyHour > 15
MyHour = Hour(Now)
-------------------
--------------------
--------------------
Loop

どうぞ、よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

お礼が遅れました。ありがとうございました。うまく動作させることが出来ました。

お礼日時:2007/03/12 17:57

こんにちは。



まあ、それそのものは、以下のようにすればよいのですが……。
それから、"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 じゃないのですね。部分的に質問を出されると、全体的には、間違った解答をしているのではないか、不安が残ります。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございました。
Do~Loop
の中では、
Sheets("a").select
for J=1 to 10000:next j
Sheets("b").select
for J=1 to 10000:next j
のように、シートの表示を切り替え
画面表示を変えるようにしています。
Do~Loop
このような場合の使い方は適切ではないのでしょうか?

ご教授お願いします

お礼日時:2007/02/04 13:58

本題を間違えました。



Sub 時刻で処理()
MyHour = "15:51"
Do Until Hour(Now) & ":" & Minute(Now) > MyHour
MsgBox "節分"
Loop
End Sub

15:51を適当に変えてください。
PC自体の時計(日付と時刻のプロパティ)を操作すると確認し易いと思います。
    • good
    • 0

こんばんわ


MyHour=timevalue("15:51")
のことですか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!