日付/時刻型データの有効範囲は、0:00:00〜23:59:59です。2つのデータの経
過時間を算出した場合23:59:59以上のときには日付/時刻型では表示することが
できません。
そこで、日付/時刻型データ間の経過時間を算出し、結果の値をテキスト型
で表示させるサンプルをご紹介します。
● 準備 ●
(1) [経過時間]テーブルを作成します。
フィールド名 データ型
------------- -----------
開始時刻 日付/時刻型
終了時刻 日付/時刻型
経過時間 テキスト型
(2) 新規標準モジュールを用意し、以下のプロシージャを記述します。
● サンプル ●
'【引数説明】
'Time1 :開始時刻
'Time2 :終了時刻
'Term :0=経過時間を最大とする 1=経過日数を使う 2=経過週数を使う
'戻り値 :テキスト型の経過時間
Public Function PassTime(Time1 As Date, _
Time2 As Date, _
Optional Term As Integer = 0 _
) As String
'初期設定
Dim dt As Long '総経過秒数
Dim h As String '経過時間
Dim m As String '経過分数
Dim s As String '経過秒数
Dim d As String '経過日数
Dim w As String '経過週数
Dim h2 As String '日数・週数を使う場合の経過時間
Dim d2 As String '週数を使う場合の経過日数
On Error GoTo Func_Err:
'経過時間計算
'引数の差を秒数で取得
dt = Abs(DateDiff("s", Time1, Time2))
'時間を取得
h = Format(dt \ 60 ^ 2, "00")
'分を取得
m = Format((dt Mod 60 ^ 2) \ 60 ^ 1, "00")
'秒を取得
s = Format(((dt Mod 60 ^ 2) Mod 60 ^ 1) \ 60 ^ 0, "00")
'日数を取得
d = CStr(h \ 24) & "日"
'週数を取得
w = CStr(h \ 24 \ 7) & "週"
'経過時間2を取得
h2 = Format(h Mod 24, "00")
'経過日数2を取得
d2 = CStr(h \ 24 Mod 7) & "日"
'引数によって経過日・経過週の使用を判断
Select Case Term
Case 0
PassTime = h & ":" & m & ":" & s
Case 1
PassTime = d & h2 & ":" & m & ":" & s
Case 2
PassTime = w & d2 & h2 & ":" & m & ":" & s
End Select
Func_Exit:
Exit Function
Func_Err:
MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
GoTo Func_Exit:
End Function
'実行プロシージャ
Private Sub SetPassTime()
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("経過時間")
Do Until Rst.EOF
Rst.Edit
Rst![経過時間] = PassTime(Rst![開始時刻], Rst![終了時刻], 2)
Rst.Update
Rst.MoveNext
Loop
Rst.Close
Set Rst = Nothing
End Sub
● 動作確認 ●
[経過時間テーブル]の[開始時刻]と[終了時刻]に適当なデータを入力し、
サンプルプロシージャSetPasTimeを実行して下さい。
サンプルではPassTime関数の第3引数を設定しているので、経過週数と経過
日数も表示されます。
この時、入力データが9:00:00のような時刻のみだとエラーが発生します。
第3引数を設定する場合には、処理データに日付が含まれることを確認して下
さい。
● 詳細 ●
日付/時刻型データは時刻を表わします。20:15:00ならば、20時間15分00秒
という「時間」ではなく、20時15分00秒という「時刻」を表わします。
よって2つの日付/時刻型データから算出した経過時間は、日付/時刻型フィー
ルドには格納できませんので、プロシージャの戻り値の経過時間はテキスト型
データにします。
サンプルでは、まず2つの時刻の差を秒数で取得し、それを時間・分・日・週
といった別の単位に変換していきます。第3引数が設定されている場合には、日
・時間が上位の単位によって変わってきますので注意が必要です。
|