OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.104961
  • 閲覧数447
  • ありがとう数6
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 81% (26/32)

経過時間を求めるときに、

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の範囲しかダメなんですよね・・・・。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル12

ベストアンサー率 45% (210/459)

こんにちは。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

お礼率 81% (26/32)

回答ありがとうございました。ちゃんと動作しました。
DateDiff関数はこのように使えばいいんですね。勉強になりました。
投稿日時 - 2001-07-16 17:45:25
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル8

ベストアンサー率 46% (22/47)

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) &# ...続きを読む
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

お礼率 81% (26/32)

一番最初に回答してくれてありがとうございました。
このソースコードでちゃんと動きました。
自分も、このようにもっと柔軟に考えられたらなぁと。。。。。
投稿日時 - 2001-07-16 17:40:02
  • 回答No.2
レベル10

ベストアンサー率 28% (39/138)

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でしょう。 コードは ...続きを読む
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

お礼率 81% (26/32)

回答ありがとうございました。ちゃんと動作しました。
ポイントあげられなくてすみません。
(全員にあげられるように、チェックボックスにすればいいのに・・)
余談も参考になりました。。。。
投稿日時 - 2001-07-16 17:43:10
  • 回答No.4
レベル12

ベストアンサー率 65% (276/422)

どもども田吾作7です。 '日付 Dim wkDate1 As Date Dim wkDate2 As Date '差計算ワーク Dim wkRefDate As Date '時間計算ワーク Dim wkHour As Long ...続きを読む
どもども田吾作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

お礼率 81% (26/32)

回答ありがとうございました。ちゃんと動作しました。
常に1時間多く計算されるとのことですが、まだ確認していませんので、
これからやってみたいと思います。
ポイントあげられなくてすみません。
(全員にあげられるように、チェックボックスにすればいいのに・・)
投稿日時 - 2001-07-16 17:47:51
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ