
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックスに日付を表示する
-
ユーザーフォームのラベルに日...
-
今日より前の書き方 マクロ
-
VisualBasic6.0のFormat関数で...
-
iPhoneの通知が何故か来なくな...
-
iPhoneのプッシュ通知の過去履...
-
最近、iPhoneがおかしいです 私...
-
【Androidスマホ】の本体上部に...
-
iPhoneの電話設定で、特定の番...
-
アンドロイドから通知無しで鳴る音
-
スマホ 電話の着信・受信履歴が...
-
shurikenのメールデータをエク...
-
ラインの通知設定有りにしてる...
-
MusicCenter For PC 再生できない
-
moto g52j 5Gを使ってるのです...
-
5年前のノートPCから最新機の処...
-
「スマホBASIO4 」で困っています
-
iPhoneのアラーム音が最大にし...
-
iPhoneアプリのLINEの音が鳴ら...
-
LINEでの音声通話について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
DataGridViewでyyyy/MM/dd
-
ユーザーフォームのラベルに日...
-
エクセルのVBAで日付を検索し転...
-
VisualBasic6.0のFormat関数で...
-
VB6.0 のformat関数について
-
JSPからYYYYMMDDで日付入力する
-
「eclipseで作るカレンダー(ス...
-
システム日付とは?
-
該当の日付以外を消去するプロ...
-
今日より前の書き方 マクロ
-
【VBA】土日をスキップして日付...
-
1本あたり○円と表示する時どの...
-
完全一致の検索
-
指定した日付が、その月の第何...
-
3人のじゃんけんのプログラム
-
コンボボックスに日付を表示する
-
excelのVBAについて、以下のコ...
-
VBA 表作成 続続
-
【Excel VBA】条件に合った行の...
おすすめ情報