• ベストアンサー

Date型の範囲を超える数値について

経過時間を求めるときに、 dim Time as Date dim Keika as Date Keika = Now - Time Keika = Format(Keika, "hh:mm:ss") でよいと思うのですが、経過時間が24時間以上になる可能性のある プログラムはどのように書けばいいのでしょうか? 例えば、53:49:12のように計算したいのですが。 Date型は23:59:59の範囲しかダメなんですよね・・・・。

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

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.3

こんにちは。itohhといいます。 たしかに、Date型だと上手く計算できません。 でも、経過時間を計算してくれる関数(DateDiff)を併用するとうまくいきますよ。 例. Dim wTime As Date Dim Keika As Date Dim wBuf As String Dim wNow As Date wTime = DateValue("2001/7/16") wNow = Now Keika = wNow - wTime wBuf = DateDiff("h", wTime, wNow) & Format(Keika, ":nn:ss")

mashiro78
質問者

お礼

回答ありがとうございました。ちゃんと動作しました。 DateDiff関数はこのように使えばいいんですね。勉強になりました。

その他の回答 (3)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

どもども田吾作7です。 '日付 Dim wkDate1 As Date Dim wkDate2 As Date '差計算ワーク Dim wkRefDate As Date '時間計算ワーク Dim wkHour As Long '最後に時間を得る文字列 Dim wkStrDate As String '時間セット wkDate1 = "2001/7/16 12:00:00" wkDate2 = "2001/7/15 11:35:21" '差を求める wkRefDate = wkDate1 - wkDate2 '時間の算出 wkHour = (Int(wkRefDate) * 24) + Hour(wkRefDate) '文字列としてセット wkStrDate = wkHour & ":" & Format(Minute(wkRefDate), "00") & ":" & Format(Second(wkRefDate), "00") 'イミディエイトウィンドウに出力 Debug.Print wkStrDate ッて感じかな? DateDiffって使ったこと無いけど、1時間多く計算されるのかな? 実験してみたら、常に一時間大きい値を出してた。実験の仕方が悪いのかな? うーむDateDiff・・・奥が深い・・・

mashiro78
質問者

お礼

回答ありがとうございました。ちゃんと動作しました。 常に1時間多く計算されるとのことですが、まだ確認していませんので、 これからやってみたいと思います。 ポイントあげられなくてすみません。 (全員にあげられるように、チェックボックスにすればいいのに・・)

  • pussyfoot
  • ベストアンサー率28% (39/138)
回答No.2

dim Time as Date dim Keika as Date dim hh as long Keika = Now - Time の後に hh = clng(Month(Keika)) * 24 '時間 cstr(hh) & ":" format$(Keika,"mm:ss") でOKでしょう。 コードはチェックしてません。ご了承ください。 ちなみに >Date型は23:59:59の範囲しかダメなんですよね・・・・。 その通りです。 それから(余談) str = d * 24 + h & ":" & Format(m, "00") & ":" & Format(s, "00") は str = cstr(d * 24 + h) & ":" & Format$(m, "00") & ":" & Format$(s, "00") と型をそろえた方が良いと思います。

mashiro78
質問者

お礼

回答ありがとうございました。ちゃんと動作しました。 ポイントあげられなくてすみません。 (全員にあげられるように、チェックボックスにすればいいのに・・) 余談も参考になりました。。。。

回答No.1

Keikaには24時間以上の部分も日数として入っていますが、24時間以上は日数として別にするしかありませんが。 表示はちょっとスマートじゃありませんが、こんな感じでいかが? Dim d As Long, h As Long, m As Long, s As Long Dim str As String h = Hour(Keika) ' 時 m = Minute(Keika) ' 分 s = Second(Keika) ' 秒 d = Int(Keika) ' 日 str = d * 24 + h & ":" & Format(m, "00") & ":" & Format(s, "00")

mashiro78
質問者

お礼

一番最初に回答してくれてありがとうございました。 このソースコードでちゃんと動きました。 自分も、このようにもっと柔軟に考えられたらなぁと。。。。。

関連するQ&A

  • エクセルVBA 参照するシートを 変数化

    早速ですが 参照するシートを 変数化して、冒頭で 宣言したいのですが datasheet1="2012" If Format(datasheet1.Cells(cnt, 2), "hh:mm:ss") = Format("9:00:00", "hh:mm:ss") Then この様な扱い方なんですが Dim datasheet1 As Object とやってもダメでした。 よろしくどうぞ

  • 他のプロジェクトの処理を待つ方法を教えて頂きたいのですが

    VB2008の初心者です。 以下のコ-ドのような、あるプロジェクトから複数のプロジェクトを 順次呼び出して処理をしたいと思っています。 '日付の入力 Dim proc As New Process() ListBox1.Items.Add(Format(Now, "HH.mm.ss") & "  *** ル-プチェック開始") proc.StartInfo.FileName = "G:\・・・・・・・・・・" 'Aプロジェクト proc.Start() ListBox1.Items.Add(Format(Now, "HH.mm.ss") & "  *** ル-プチェック終了") ListBox1.Items.Add(Format(Now, "HH.mm.ss") & "  *** ロ-レベルコ-ド付与開始") proc.StartInfo.FileName = "G:\・・・・・・・・・・" 'Bプロジェクト proc.Start() ListBox1.Items.Add(Format(Now, "HH.mm.ss") & "  *** ロ-レベルコ-ド付与終了") Aプロジェクトを呼び出して開始時間を表示するのですが、呼び出すと すぐに終了時間を表示してしまいます。 呼び出されるプロジェクトは、DBの更新だけでFormからの入力は無いと言う処理内容です。 Aプロジェクトが終了するまで、終了時間の表示を待つ方法を教えて頂きたいと思い、投稿しました。 よろしくお願いします。

  • 秒数変換

    秒数を入力してそれが何日、何時間、何分、何秒に変換するプログラムを作りたいのですが Sub 秒数変換() Dim tt As Long, dd As Long, hh As Long, mm As Long, ss As Long tt = ("秒数を入力してください") mm = tt \ 60: ss = tt Mod 60 hh = mm \ 60: mm = mm Mod 60 dd = hh \ 24: hh = hh Mod 24 MsgBox tt & "秒は" & dd & "日" & hh & "時間" & mm & "分" & ss & "秒です" End Sub 自分で考えてこう作成したのですが、実行すると型があっていませんと表示がでます。なぜでしょう?

  • 時間の計算の方法

    2つのStr(time1、time2)に「yyyy/mm/dd hh:mm:ss」の形で データが入っていて、time2 - time1をtime3に「hh:mm:ss」に フォーマットして入れたいのですが、 VBの場合、  new1 = CDate(time1)  new2 = CDate(time2)  new3 = new2 - new1  time3 = Format(new3, "hh:mm:ss") で可能だと思いますが、ASPの場合はどのようにすればいいのですか? Formatを認識しないらしく、文字化けしてしまうので、 どなたか教えてください。よろしくお願いします。 まだASP歴、3日目なもので。。。。

  • date型へのinsertについて

    cプログラムにてoracleのあるテーブルのdate型カラムに値をinsertしたいのですが、 'YYYY/MM/DD hh:mm:ss'の情報を格納するにはどうすればよいのでしょうか? TO_DATEを使用するのでしょうか?

  • エクセル Worksheet_Calculate

    Worksheet_Calculate()  ですが、A:4 から h:4 だけ 反応する。 それ以外は、 Exet Sub で Calculate を 抜ける。 この範囲指定の方法は無いでしょうか 時間なら 下記で事足りるのですが If Format(Time, "hh:nn:ss") < Format("9:00:00", "hh:nn:ss") And Format(Time, "hh:nn:ss") Format("3:00:00", "hh:nn:ss") Then Exit Sub End If

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

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

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

  • 【PL/SQL】DATE型の時刻の表示と非表示

    PL/SQLでのDATE型の取扱いについて教えてください。 初期化パラメータNLS_DATE_FORMATが'YY-MM-DD'で、 ある列を'YYYY/MM/DD HH24:MI:SS'形式でDBにINSERTしたい場合、 dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); としてINSERTにdtWorkEndDateを用いると、 YY-MM-DD形式でDBに登録されてしまいます。 (dtWorkEndDateはDATE型。) ORACLEの設定かPL/SQLの問題なのかわからないのですが、 なにかアドバイスを頂けないでしょうか。 よろしくお願いします。

  • 参考サイトを探しています。

    VB6.0を使っています。 OSはwindows2000です。 text1にtimerで現在時間を表示しています。 何時になったらイベントを発生させると、複数のイベント発生条件を入れられるいうものを作っているのですが、検索のしかたがわかりません。 VB 入門 タイマー 時間 イベント 複数 アラーム などを組み合わせたのですがうまいこと出てこないので参考ページお願いします。 只今こんな感じです Option Explicit Dim SetTime As String ----------------------------------------------------- Private Sub Command1_Click() SetTime = Text2.Text ← 出来れば直接の時間を設定したい。 End Sub ---------------------------------------------- Private Sub Timer1_Timer() Text1.Text = Format(Time, "hh:mm:ss") If Format(Now, "hh:mm") = SetTime Then MsgBox ("設定した時間です " & SetTime) End If End Sub -------------------------------------------- ヨロシクお願いします

専門家に質問してみよう