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
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)
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
この回答への補足
回答ありがとうございます。
遅くなってすみません。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 小学校 5年 速さを求める 3 2023/02/16 17:14
- 医療・介護・福祉 点滴の計算問題についての質問です。 多分、普通の算数の問題だと思うんですけど ネットの解説がわからな 2 2022/11/30 18:25
- Google Drive スプレッドシートの時間(分、秒)の足し算SUM関数がうまくいきません。 3 2022/09/08 16:39
- 関西 KBS京都 あんぎゃでござる TOKYO MX 京都 名所 日曜日 東京駅 東海道新幹線 京都駅 1 2023/08/13 10:10
- アルバイト・パート アルバイトの日給 3 2022/11/30 08:44
- 宇宙科学・天文学・天気 量子コンピュータができたことにより人類の生活はすこぶる変わったと思う 例えば 人間は亡くなる 亡くな 3 2023/04/05 01:07
- 大学受験 身長187cmです。 東大理3合格者の勉強時間最短のギネス記録は5分28秒らしいですね。映像見てみま 7 2022/07/30 17:53
- 労働相談 有給休暇使用時の賃金の計算方法について 5 2022/04/04 00:02
- 物理学 二つの光時計 2 2022/06/02 16:32
- 物理学 (1)秒針の角速度の大きさω(ω>0)を計算しなさい 単位はrad/s、πはそのまま残すこと (2) 3 2023/05/01 12:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックスに日付を表示する
-
DataGridViewの和暦表示について
-
VisualBasic6.0のFormat関数で...
-
ExcelVBAでSQLサーバの日付時刻...
-
Eclipseの対応する括弧の強調表...
-
3人のじゃんけんのプログラム
-
ユーザーフォームのラベルに日...
-
和暦表示
-
テキストボックスに今日の日付...
-
VBAで当月の1日を表示するには...
-
<Access>2つの抽出条件が合致...
-
DataGridViewでyyyy/MM/dd
-
VBAの質問になります 行の非表示
-
エクセルのVBAで日付を検索し転...
-
「eclipseで作るカレンダー(ス...
-
Googleフォームで選択肢に応じ...
-
VBAで日付入力しているのですが
-
ACCESSのフォームに本日...
-
VBA:日付をシリアル値にできる...
-
今日より前の書き方 マクロ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAの質問になります 行の非表示
-
ユーザーフォームのラベルに日...
-
Googleフォームで選択肢に応じ...
-
エクセルのVBAで日付を検索し転...
-
VisualBasic6.0のFormat関数で...
-
システム日付とは?
-
Eclipseの対応する括弧の強調表...
-
【VBA】土日をスキップして日付...
-
DataGridViewでyyyy/MM/dd
-
【Excel VBA】条件に合った行の...
-
VBAで当月の1日を表示するには...
-
VBA 日付、未来の日付はエラー...
-
JSPからYYYYMMDDで日付入力する
-
VB6.0 のformat関数について
-
指定した日付が、その月の第何...
-
VBで時間計算
-
VBAのオーバーフローについて質...
-
今日より前の書き方 マクロ
-
テキストボックスに今日の日付...
-
3人のじゃんけんのプログラム
おすすめ情報