アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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の範囲しかダメなんですよね・・・・。

A 回答 (4件)

こんにちは。

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")
    • good
    • 1
この回答へのお礼

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

お礼日時:2001/07/16 17:45

どもども田吾作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・・・奥が深い・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/16 17:47

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")
と型をそろえた方が良いと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/16 17:43

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")
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/16 17:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!