二つのセルに分かれて、時刻(年月日、時分秒)が記録されています。
(例
セルA1(2014/4/21)とセルA2(23:12:56)
例終わり)
このような二つのセルが一組である時点の時間を表しており、そのようなセル二つから経過時間を求めるためのコードを募集します。
なお、日付の方の書式設定は「日付:種類は*2014/3/14」
時間の方は「ユーザー定義-種類は-h:mm」
です。
例えば、日付が「2014/5/1」時刻が「12:00:00」から
「2014/5/3」時刻が「13:02:00」
ならば2日と1時間2分といった具合です。
答えはまた、分割して、日付の部分と時間の部分に出力したいです。
よろしくお願いします。
具体的なコードへの説明のある方へ高ポイントを配布します。
こんな感じでどうでしょう。
A1=年月日,A2=時分秒
B1=年月日,B2=時分秒
A1,A2とB1,B2の差をC1に代入します。
Sub hoge() Dim ti0, ti1 As Date Dim td As Long Dim dd, hh, mm, ss As Integer Dim res As String ti0 = ActiveSheet.Cells(1, 1).Value + ActiveSheet.Cells(2, 1).Value ti1 = ActiveSheet.Cells(1, 2).Value + ActiveSheet.Cells(2, 2).Value '差を計算する If (ti0 < ti1) Then td = DateDiff("s", ti0, ti1) '日時の差 dd = Int(td / 60 / 60 / 24) hh = Int((td - dd * 60 * 60 * 24) / (60 * 60)) mm = Int((td - dd * 60 * 60 * 24 - hh * 60 * 60) / 60) ss = Int(td - dd * 60 * 60 * 24 - hh * 60 * 60 - mm * 60) res = "" If (dd <> 0) Then res = dd & "日" res = res & hh & "時間" & mm & "分" & ss & "秒" Else res = "日時の順序を入れ替えてください" End If '表示 ActiveSheet.Cells(1, 3).Value = res End Sub
関数で書くと次のようになります。
=TEXT((B1+B2)-(A1+A2),"d日h時間m分s秒")
こんな感じでどうでしょう。
A1=年月日,A2=時分秒
B1=年月日,B2=時分秒
A1,A2とB1,B2の差をC1に代入します。
Sub hoge() Dim ti0, ti1 As Date Dim td As Long Dim dd, hh, mm, ss As Integer Dim res As String ti0 = ActiveSheet.Cells(1, 1).Value + ActiveSheet.Cells(2, 1).Value ti1 = ActiveSheet.Cells(1, 2).Value + ActiveSheet.Cells(2, 2).Value '差を計算する If (ti0 < ti1) Then td = DateDiff("s", ti0, ti1) '日時の差 dd = Int(td / 60 / 60 / 24) hh = Int((td - dd * 60 * 60 * 24) / (60 * 60)) mm = Int((td - dd * 60 * 60 * 24 - hh * 60 * 60) / 60) ss = Int(td - dd * 60 * 60 * 24 - hh * 60 * 60 - mm * 60) res = "" If (dd <> 0) Then res = dd & "日" res = res & hh & "時間" & mm & "分" & ss & "秒" Else res = "日時の順序を入れ替えてください" End If '表示 ActiveSheet.Cells(1, 3).Value = res End Sub
関数で書くと次のようになります。
=TEXT((B1+B2)-(A1+A2),"d日h時間m分s秒")
日付や時刻のセルは、実は 1900/1/1 0:00 からの相対日です。
B1 に 2014/5/1 、C1 に 12:00 を入力しました。
F1 は =B1、G1 は =C1 で、書式を yyyy/m/d h:mm にしました。
また、F2 は =B1、G2 は =C1 で、こちらは書式を標準にしたものです。
日付だけを入力すると、時刻が 0:00 の相対日。
時刻だけを入力すると、日付が 1900/1/1 の入力した時刻になります。
つまり、B1+C1 は 2014/5/1 12:00 の相対日になります。
B5 と C5 に差分を求める対象の日と時刻を入力しました。
D2 と E2 は、以下の式です。
=$B5+$C5-($B$1+$C$1)
絶対参照は、セルをコピーしたときに変えたくないのでつけているだけです。
B5+C5 が、2014/5/3 13:02 の 1900/1/1 0:00 からの相対日。
B1+C1 が、2014/5/1 12:00 の 1900/1/1 0:00 からの相対日です。
これを引くことで、2014/5/1 12:00 から 2014/5/3 13:02 の相対日になります。
これを D5 は書式を「d "日"」、E5 は書式を「h "時間" mm "分"」としました。
コメント(0件)