• ベストアンサー

vba 明日の6時まで、あと何時間何分あるか

vba 今の時間から明日の6時まで、あと何時間何分あるかを取得したいのですが うまくいきません。 Sub a() Const 予定 As Date = "06:00:00" '明日の6時 MsgBox "明日の6時まであと" & Format(Now - 予定, "hh:mm") & "あります" End Sub これだと、今の時刻(21:51)で実行すると15:51が返ります。 でも明日の6時まで15時間51分もないです。 何がまちがってますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ensan
  • ベストアンサー率60% (3/5)
回答No.1

質問者様の式では、21:51-6:00となるので、15:51が返値となるのは当然です。 1.datedif関数で、同日かどうかを判別 2.前の日の場合、(24:00-now)+6:00を返す。 3.同じ日の場合、6:00-nowを返す。 細かくは、調整が必要かと思いますが、考え方はこんな感じかと思います。 これができれば、オリンピックまでのカウントダウンだって作れますよ。笑

eclullfkddus
質問者

お礼

ありがとうございます。

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 普通に考えて >MsgBox "明日の6時まであと" & Format(Date + 1 + 予定 - Now, "hh:mm") & "あります" としてみてはどうでしょうか?m(_ _)m

eclullfkddus
質問者

お礼

ありがとうございます。

関連するQ&A

  • 1/10秒単位で経過時間を測りたい

    Excell VBA で 1/10 秒単位で経過時間を表示する方法を教えてください。 現在は次の書式を使っているので、1秒単位でしか表示されません。 MsgBox "所要時間 : " & Format(Now - StartTime, "hh:mm:ss") StartTime は計測開始時刻です。

  • あと何時間何分か

    いつも決まった固定の時刻まであと何時間何分なのか表示させたいのですが、 固定の○時からnow関数で引くことはできないし、 未来の適当な日付の○時にしてしまうとその後の計算がくるってしまいます。 なにかいいほうほうはありませんか。

  • VBAで出した数字の分表示について

    Public Sub Jikoku() Range("A1").Value = Format(Now(), "hh:mm:ss") Application.OnTime Now + TimeValue("00:00:01"), "Jikoku" End Sub このVBAをつかって時間を出してセルの書式設定で mm表示で時間だけ表示しようとすると 例えば9:32:26だとしても01と表示されてしまいます。 mm:ssだと32:26と出るのですが、分だけだとうまくいきません。 原因が分かる方いらっしゃいますでしょうか? 原因かどうかわかりませんが年数表示が1900年となってしまいます。 PCの設定は2014年なのですが、、

  • エクセル 時間の合成

    インターバル = TimeValue("00:50:00") 早速ですが インターバル = TimeValue("00:50:00") Debug.Print Now + インターバル これは エラーになりません。 しかし If Format(Now, "hh:mm:ss") < Format("3:00:00", "hh:mm:ss") Then 終了時刻 = Format(Now, "yyyy/mm/dd") & " " & TimeValue("3:02:00") Else 終了時刻 = Format(DateAdd("d", 1, Now), "yyyy/mm/dd") & " " & TimeValue("3:02:00") End If Debug.Print 終了時刻 + インターバル これは、型が合わないエラーです。 終了時刻は 文字列的に合成されただけ・・・だろうと 推察するのですが では、「終了時刻 + インターバル」 が 可能な終了時刻は どうして 作ればいいのでしょうか?

  • エクセル VBA タイマー 0:00:00で

    5分ピッチで 仕事させます。 ブックオープンで インターバル = TimeValue("00:05:00") Application.OnTime Format(開始時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間 Debug.Print "st" & 開始時刻 Call timer_set 反復時刻 = 開始時刻 If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then 反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10") Else 反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル End If ループで5回ほど Application.OnTime Format(反復時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間 Debug.Print "loopexit" & 反復時刻 で、デバッグアウトが end 2013/08/15 3:02:00 st 2013/08/14 23:50:10 loop2013/08/14 23:55:10 loop2013/08/15 00:00:10 loop2013/08/15 00:05:10 loop2013/08/15 00:10:10 loopexit2013/08/15 00:15:10 makuro 2013/08/15 00:20:10 makuro 2013/08/15 00:25:10 makuro 2013/08/15 00:30:10 で、「必要な作業を行うマクロ」 で 仕事のあと タイマー追加します。 If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then 反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10") Else 反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル ' End If Application.OnTime Format(反復時刻, "hh:mm:ss"), "必要な作業を行うマクロ", 待ち時間 (反復時刻を 時間だけの時 formatを 入れて・・・) Debug.Print "makuro " & 反復時刻 ’これが デバッグで出力されています。 で、ダミーの作業が clup = clup + 1 orgdata.Cells(clup, 10) = Format(Now, "yyyy/mm/dd") orgdata.Cells(clup, 11) = Format(Now, "hh:mm:ss") orgdata.Cells(clup, 12) = Format(反復時刻, "yyyy/mm/dd") orgdata.Cells(clup, 13) = Format(反復時刻, "hh:mm:ss") 結果 2013/8/14 23:50:10 2013/8/15 0:20:10 2013/8/14 23:55:10 2013/8/15 0:25:10 2013/8/15 0:00:10 2013/8/15 0:30:10 これで、タイマー作業が 途切れます。 0:00:00 超える事に 問題があるなら 0:00:10 は 実行されないハズ・・・・ 反復時刻は yyyy/mm/dd & ” ” & ”hh:mm:ss” です。 試しに 時刻だけでやっても 同じでした。 さて、如何でしょ? 実は これで、動いていたのですが、3日ほど前から 0:00以降 突然タイマーが動かなくなったのです PCは 3台 同じ現象です よって WINの設定では無い・ エクセル オプションに 何か設定でもあるのか?? どうも VBAのタイマーは不可解で エクセル終了させず、 プログラムだけ終了、再ロードだと、前のタイマー残ったまま、ダブルでタイマー動くとか・・・・ それと、WIN32とかの 別のタイマー使った方が 良いのでしょうか??

  • VBA 「何時間何分何秒」にするにはどうすればいい

    Declare Function GetTickCount Lib "KERNEL32" () As Long Sub Sample() Debug.Print GetTickCount & "ミリ秒" End Sub これで取得される値を 「何時間何分何秒」にするにはどうすればいいでしょうか? Format(GetTickCount, "hh:mm:ss") にするとなぜかオーバーフローしてしまいました。

  • 時間フォーマット VBA

    VBA初心者です。Javaなどはある程度できるレベルのものです セルにHH:mmフォーマットで時間を入力したくて以下のコードで実行すると12列目は正常に入力でき、 13列目にも同じように指定シたいです。 試したのは If IntersectからEnd Ifまでを最終行の手前にColumns(13)で全体を追加しました。 しかし、13列目はVBAが効いていません また、12列目に入力した値を消すと : (コロン)が残ってしまいます。 また、ThisWorkBookにこのコードを書いてもVBAが効いていません。 このファイルは作業中のシートに対するものでしょうか。 だとしたら、作業中シートに対して行うにはどう書いたらよいのかわからずにおります。 細かい質問ですみません。 ご存知か方がおられましたら教えてください。 よろしくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Columns(12)) Is Nothing Or Selection.Count <> 1 Or Not IsNumeric(Target) Then Exit Sub ' Debug.Print "Target==" & Target If Target <= 2359 And Target Mod 100 < 60 Then ' Application.EnableEvents = False ' With Target ' If Len(Target) = 3 Then .Value = 0 & ":" & Right(Target, 2) ElseIf Len(Target) = 3 Then .Value = Left(Target, 1) & ":" & Right(Target, 2) Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End If .NumberFormatLocal = "hh:mm" ' End With ' Application.EnableEvents = True ' Else MsgBox "入力値が不正です。" ' With Target ' .Value = "" .Select End With Exit Sub ' End If End Sub 'この行まで

  • VBA dateの戻り値

    ExcelVBA初心者です。 下記プログラムを組んでいるのですがMyDateの戻り値が常に -1された数字になってしまいます。 たとえば、25を入力したら24になる。これはなぜなのでしょうか? また、0だと30になってしまいます。 Sub hani() Dim MyDate As Date MyDate = Application.InputBox("報告する日を入力してください", "報告日", Format(Now, "dd")) If Format(MyDate, "dd") > 0 And Format(MyDate, "dd") > 32 Then MsgBox Format(MyDate, "dd") MsgBox "範囲内" Else MsgBox Format(MyDate, "dd") MsgBox "範囲外" End If End Sub

  • Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが

    Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが、以下のエラーメッセージが出ました。 マクロ "C:\aaa\Timer.xls'!Record1'が見つかりません。 マクロは、Timer.xlsブックのThisWorkbookに記述しています。 ---------------------------------------------------------------------- Sub timer1() 指定時刻 = TimeValue("09:00:00") 終了時刻 = TimeValue("11:00:00") Application.OnTime 指定時刻, "Record1" End Sub ---------------------------------------------------------------------- Sub Record1() Dim sh1, sh2 If TimeValue(Now) >= 終了時刻 Then '終了時刻になら終わる MsgBox "終了時刻になりました。" Application.CutCopyMode = False Exit Sub End If Set sh1 = Worksheets("1") Set sh2 = Worksheets("2") sh1.range("G5:G506").Copy 'コピー sh2.range("Q5:Q506").PasteSpecial Paste:=xlValues Selection.Offset(0, 2).Select '2行ずらす 指定時刻 = Now + TimeValue("00時05分00秒") '5分後 Application.OnTime 指定時刻, "Record1" End Sub ---------------------------------------------------------------------- どこを直せばよろしいのでしょうか? よろしくお願いします。

  • ただ、今日の日付を求めたいときはどちらのVBAコー

    VBA初心者のため教えてほしいのですが ただ、今日の日付を求めたいときはどちらのVBAコードを使えばいいですか? Sub test1() MsgBox DateValue(Date) End Sub Sub test2() MsgBox Date End Sub です。 ご教授よろしくお願いします。

専門家に質問してみよう