• ベストアンサー

VBで時間計算

教えてください。 VBで時間の足し算をしたいのですが、方法が分かりません。 例えば、毎日の通信時間の合計を出したい場合ですが、 00:15:30(15分30秒) 00:45:31(45分31秒) の日があったとします。 この合計は01:01:01(1時間1分1秒)になると思います。この計算ができずに困っています。 教えて頂けないでしょうか。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 ヘルプに書いてありましたね。 演算子(\)   除算を実行する前に、数式はバイト型 (Byte)、整数型 (Integer)、また   は長整数型 (Long) の式に丸められます。 となっていましたね。うっかりしていました。 これは負の値がないのなら、単に、Int(Sum) で大丈夫のような気もしますね。 しかし、今、気が付いたのですが、 >毎日の通信時間の合計を出したい場合ですが、 >00:15:30(15分30秒) >00:45:31(45分31秒) 累積時間の計算でしたら、私の前回のコードはダメですね。エラーが発生します。全面的に見直しました。 いくら、その都度計算していっても、累積時間だから、以下のような結果もありますね。時間(hour)は、時間(hour)だけの計算にしました。  "25:15:40"  "28:45:31"  ----------  "54:01:11" Sub TimeCalc()  Dim myTime1 As String, myTime2 As String  Dim ans As String  myTime1 = "09:15:30"  myTime2 = "08:45:31"    ans = TimeSum(myTime1, myTime2)  MsgBox ans End Sub Private Function TimeSum(ByVal arg1 As String, ByVal arg2 As String) As String  Dim h1 As Long, h2 As Long, t1 As String, t2 As String  Dim Sum As Double, d As Long, h As Long, dh As Long  Dim m As Long, s As Long    h1 = Mid(arg1, 1, InStr(arg1, ":") - 1)  t1 = "00:" & Mid$(arg1, InStr(arg1, ":") + 1)     h2 = Mid(arg2, 1, InStr(arg2, ":") - 1)  t2 = "00:" & Mid$(arg2, InStr(arg2, ":") + 1)    If h1 + h2 > 23 Then   d = Int((h1 + h2) / 24)   dh = (h1 + h2) Mod 24  Else   dh = h1 + h2  End If   Sum = CDbl(TimeValue(t1)) + CDbl(TimeValue(t2))   h = Hour(Sum): m = Minute(Sum): s = Second(Sum)   h = d * 24 + dh + h   TimeSum = Format$(h, "00") & ":" & Format$(m, "00") & ":" & Format$(s, "00") End Function

vivatom
質問者

お礼

ありがとうございました。 なんとか作成することができました。 助かりました。

その他の回答 (5)

回答No.5

#4での自己発言についての調査結果 >18:01:01 = 0.750706018518519 (Double型) >なのに1が入るのが不思議(もしやバグ?) \ 演算子について 構文 結果 = 数式1 \ 数式2 仕様 数式1 と 数式2 は除算を実行する前に[Byte/Integer/Long]のいずれかに丸められる 0.750706018518519 \ 1 だから 1 \ 1 が計算される ということで、バグではなかったようです。 だから計算の際は、切捨て必須!

回答No.4

#1もしくは#2です。 18:01:01 = 0.750706018518519 (Double型) なのに1が入るのが不思議(もしやバグ?) なら切捨てを実行したらいいです。 lng日数 = inDate \ 1 ↓ lng日数 = CLng(inDate - 0.5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 こんな風でいかがでしょうか? 単純なコードにしてみました。 元に時間の入れ方などは、お任せします。 Option Explicit Sub TimeCalc()  Dim myTime1 As String, myTime2 As String  Dim a As Double, b As Double, Sum As Double  Dim d As Long, h As Long, m As Long, s As Long    myTime1 = "00:15:30"  myTime2 = "23:45:31"    a = CDbl(TimeValue(myTime1)): b = CDbl(TimeValue(myTime2))  Sum = a + b    d = Sum \ 1: h = Hour(Sum): m = Minute(Sum): s = Second(Sum)  d = d * 24    MsgBox Format$(d + h, "00") & ":" & Format$(m, "00") & ":" & Format$(s, "00") End Sub

vivatom
質問者

補足

回答ありがとうございます。 遅くなってすみません。 myTime1 = "09:15:30" myTime2 = "08:45:31" とかの場合に d = Sum \ 1 でSumの値が1になります。すると、 Format$(d + h, "00") が24+18で42となってしまいます。 この場合計算が合わないのですが、どうすればいいのでしょうか。 何度もすいませんがご教授お願い致します。

回答No.2

日付を時間に変えたらいいだけですよー Sub Main()   Dim dateWk As Date   Dim str結果 As String      '足し算   dateWk = Calc日付合算("12:01:05", "13:01:05")   dateWk = Calc日付合算(dateWk, "14:09:20")   dateWk = Calc日付合算(dateWk, "16:01:59")   Call MsgBox("取得結果: = " & dateWk)      '変換   str結果 = Convert日付から時刻型(dateWk)   Call MsgBox("最終結果: = " & str結果) End Sub Function Convert日付から時刻型(ByVal inDate As Date) As String   Dim lng日数 As Long   Dim dbl時間 As Date      '日付と時刻に分割   lng日数 = inDate \ 1   dbl時間 = inDate - lng日数   '書式を整理して返却(あんまり大きいとオーバーフローしちゃう)   Convert日付から時刻型 = (lng日数 * 24 + Hour(dbl時間)) & Mid(dbl時間, Len(Hour(dbl時間)) + 1) End Function Function Calc日付合算(ByVal inStrDate1 As String, ByVal inStrDate2 As String) As Date   Calc日付合算 = CDate(CDate(inStrDate1) + CDate(inStrDate2)) End Function

回答No.1

MSGBOX CDate("00:15:30") + CDate("00:45:31")

vivatom
質問者

補足

ありがとうございます。 この場合、24時間を超えるとまた0に戻ってしまうのですが、そのときの処理はどうすればいいのでしょうか。 何度もすみませんが、教えて頂けないでしょうか。 お願いします。

関連するQ&A

  • VB2008で日付と時間の計算

    教えて下さい。 VBで日付と時間の足し算をしたいのですがやり方がわかりません。 フォームに6つのテキストボックスを配置し、6つのテキストボックスには それぞれ日・時・分の数値を入力します。 例えばヤフーオークションの終了時刻を計算したい場合、 TextBox1~3に現在の日時を入力し、TextBox4~6に残り時間を入力します。 現在時刻 [4] 日 [17] 時 [44] 分 残り時間 [3] 日 [6] 時間 [30] 分 この数値の足し算結果をメッセージボックスに終了時刻として表示させるようにしたいのですが、やり方が分からず困ってます。 教えていただけないでしょうか。

  • VB6.0で時間の計算方法

    いつもお世話になります。 VB6.0で時間の計算方法でつまっています。 足し算はDataAdd関数でよさそうですが・・・ 皆様のお知恵をお貸し下さい。

  • 時間の計算の仕方

    時間の計算の仕方で、簡単にできる方法が知りたいのです。 例えば、7時間18分と、8時間37分、8時間11分を足して 時間の合計を出すとき。 現在やっているのは、 7(時間)+8(時間)+8(時間)=23(時間) というように、まず時間の合計を出してから、 分の合計を 18(分)+37(分)+11(分)=66(分)で、 66(分)÷60(分)=1(時間)と6分、と出す。 最後に23(時間)+1(時間)+6(分)=24(時間)6(分) このように、時間の合計を出しています。 もっと効率よく計算できる方法はありませんか? インターネットで調べたのですが、足し算の方法は 残念ながらみつかりませんでした。 できれば、ソフト(パソコン)を使わずに 計算機で効率よく計算できればなぁ、と思っています。 ややこしい書き方ですみません。 わかる方いらっしゃいましたら、よろしくお願いいたします。

  • エクセル 60進法 時間 計算

    エクセルでの勤務時間の計算方法なのですが、 例えば、出勤 23時00分  退勤  7時00分     出勤 7時00分   退勤  15時00分 の勤務時間をエクセルで足し算、引き算、合計計算の方法を教えてもらえませんか? 合計計算のように別々の複数の合計計算を出来るようには出来ないのでしょうか? 宜しくお願いします>

  • VB6での時間計算について

    VB6での時間計算について VB6で時間計算のプログラムを作成しています。 しかし、行き詰ってしまいました。 どなたかご教授願います。 3時50分から10時20分は何時間分経っているかという計算式で悩んでいます。 時間を打ち込み用にテキストボックスを4つ作ってまして、一つ目に「3」、二つ目に「50」、三つ目に「10」、四つ目に「20」という風に打ち込みコマンドボタンを押すと6.5時間と算出されテキストボックスかラベルに表示されるといったことをするにはどうしたらいいのでしょうか?

  • VBで時間計算の方法

    VB6で時間計算のソフトを作っているのですが、"08:20"を"0820"、"17:10"を"1710"と入力して、"1710"から"0820"の差を分単位"480"で表示したいのですが、どうしたらいいですか? また、時間の平均計算の方法はどうしたらいいですか?

  • VB2010で、時刻と時間の計算について

    時刻と時間の計算で、どうするのが最適か教えて下さい。 1…2つの時刻、例えば「08時28分」から「17時04分」までの時間を計算し、Labelにその時間「8時間36分」と表示する 2…3つの時間、例えば「8時間36分」、「6時間08分」、「9時間54分」の合計を計算し、Labelにその合計を表示する 3…上記2番目の平均を計算し、Labelにその平均を表示する よろしくお願いします。

  • 時間の計算

    残業時間の合計をExcelで求めたいと思っています。 例えばA1に1時間20分、B1に2時間10分と記入して C1にA1とB1を合計した3時間30分と表示させたいです。 普通に入力して足し算をしたのではC1の値が0になってしまいます。 うまく表示させる方法があったら教えてください。

  • EXCELでの時間計算について

    私の会社には、1ヶ月の残業時間を入力し印刷して提出する為のEXCELデータがあります。 自分で日毎に残業時間を入力して、その合計を電卓で計算して入力するようなものです。 残業した日が多い時は、いちいち合計を計算するのが面倒なので、なにか良い計算式は無いでしょうか。 今入力している方法は、A列に時間、B列に分(10分単位の入力)という感じで1ヶ月分を入力しています。 A列の「時間」は単純に足していけばよいのでしょうが、B列は「分」なので例えば合計して510分となったとき、 それを8時間30分にして、その8時間をA列のほうに足すというような計算式を教えて頂けませんでしょうか。 あと、日毎の残業時間は10分単位で入力するのですが、その月の合計は30分単位にして提出しなければなりません。 例えば、合計が30時間40分~50分の場合は30時間30分にしなければなりませんし、 30時間10分~20分の場合は30時間00分にしなければなりません。 この両方の内容を兼ね備えた計算ができる方法を教えて頂きたく存じます。 分かりにくい文章で、申し訳ありませんがよろしくお願い致します。

  • Excelの時間計算について

    Excelの時間計算で、計算結果が「1時間30分25秒」となった場合は 「1時間30分」、「1時間30分45秒」となった場合は「1時間31分」と、 30秒以下なら切り捨て、31秒以上なら切り上げて、○時間○○分と 計算結果を出したい場合はどうすればよいでしょうか?

専門家に質問してみよう