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ランキング
-
ユーザーフォームのラベルに日...
-
エクセルのVBAで日付を検索し転...
-
VBA 日付・時刻の判別 時刻を認...
-
3人のじゃんけんのプログラム
-
最近、iPhoneがおかしいです 私...
-
アンドロイドから通知無しで鳴る音
-
LINE通話中のバナー
-
スマホ 電話の着信・受信履歴が...
-
iPhone
-
通知音をけす方法
-
LINEの赤いお知らせマーク...
-
iPhoneの着信履歴に履歴を残さ...
-
iPhoneの通知が何故か来なくな...
-
PC上でGmailが来たときに、右下...
-
iPhoneのメールで、特定の人だ...
-
moto g52j 5Gを使ってるのです...
-
g08を工場出荷時に戻したい!
-
同じような内容の重複投稿したら
-
iPhoneのプッシュ通知の過去履...
-
エイサーかレノボ それとも国...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームのラベルに日...
-
エクセルのVBAで日付を検索し転...
-
Eclipseの対応する括弧の強調表...
-
DataGridViewでyyyy/MM/dd
-
VisualBasic6.0のFormat関数で...
-
JSPからYYYYMMDDで日付入力する
-
今日より前の書き方 マクロ
-
3人のじゃんけんのプログラム
-
システム日付とは?
-
【Excel VBA】条件に合った行の...
-
【VBA】土日をスキップして日付...
-
VBA 日付、未来の日付はエラー...
-
VBAで当月の1日を表示するには...
-
「eclipseで作るカレンダー(ス...
-
VBAの質問になります 行の非表示
-
VB 日付範囲チェック
-
コンボボックスに日付を表示する
-
テキストボックスにカレンダー...
-
指定した日付が、その月の第何...
-
DataGridViewの和暦表示について
おすすめ情報