-PR-
解決済み

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

  • すぐに回答を!
  • 質問No.104961
  • 閲覧数466
  • ありがとう数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

その他の回答 (全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) ' 分
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でしょう。
コードはチェックしてません。ご了承ください。

ちなみに
>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

'最後に時間を得る文字列
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で解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


専門家があなたの悩みに回答!

ピックアップ

ページ先頭へ