![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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ランキング
-
Googleフォームで選択肢に応じ...
-
ユーザーフォームのラベルに日...
-
エクセルのVBAで日付を検索し転...
-
3人のじゃんけんのプログラム
-
【Excel VBA】条件に合った行の...
-
日付の差を求めるには
-
VBA 日付・時刻の判別 時刻を認...
-
JSPからYYYYMMDDで日付入力する
-
今日より前の書き方 マクロ
-
ホワイトボックステストの条件...
-
最近、iPhoneがおかしいです 私...
-
電話の着信が来てないのに着信...
-
アンドロイドから通知無しで鳴る音
-
iPhone14ですが、マナーモード...
-
質問に回答が付くとメールにま...
-
SIM無しアップデート方法
-
GOM Player は、ネットに接続...
-
iPhoneの通知が何故か来なくな...
-
MusicCenter For PC 再生できない
-
canon zoombrowser EX のフォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームのラベルに日...
-
エクセルのVBAで日付を検索し転...
-
DataGridViewでyyyy/MM/dd
-
Eclipseの対応する括弧の強調表...
-
JSPからYYYYMMDDで日付入力する
-
「eclipseで作るカレンダー(ス...
-
VisualBasic6.0のFormat関数で...
-
今日より前の書き方 マクロ
-
【VBA】土日をスキップして日付...
-
1本あたり○円と表示する時どの...
-
3人のじゃんけんのプログラム
-
システム日付とは?
-
VBAで当月の1日を表示するには...
-
【Excel VBA】条件に合った行の...
-
VB6.0 のformat関数について
-
テキストボックスにカレンダー...
-
VBA 日付、未来の日付はエラー...
-
コンボボックスに日付を表示する
-
指定した日付が、その月の第何...
-
VB 日付範囲チェック
おすすめ情報