• ベストアンサー

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