HOME > 即効テクニック > AccessVBA > 日付・文字列操作・演算 > Timer関数の結果から正しい時刻を取得する

即効テクニック

日付・文字列操作・演算

Timer関数の結果から正しい時刻を取得する

(Access 97)

● 概要 ●
Timer関数は、午前0時から経過した秒数を数値(単精度小数点型)で返す関数です。
そのため、Format/書式プロパティを「時刻」にしても正しい値は表示されませんし、DatePart関数で「時分秒」を取り出すことも出来ません。
そこで今回は、Timer関数の結果を「時分秒」に直す方法を説明します。


● 準備 ●
(1) 新規の非連結フォーム[フォーム1]を作成します。
(2) フォーム上にテキストボックス[テキスト1]〜[テキスト3]、コマンドボタン[コマンド1]を配置します。
(3) 以下の画像を参照して、テキストボックスと同時に作成されたラベルと、コマンドボタンの標題を変更します。

      

(4) フォームのクラスモジュールと、コマンドボタンのOnClick/クリック時イベントに、以下のプロシージャを記述します。


● サンプルコード ●
' フォームのクラスモジュールに記述するユーザー定義関数
Private Function SetTime(TM As Single)
    Dim timeH As Integer
    Dim timeN As Integer
    Dim timeS As Integer

    '時分秒を取得
    timeH = Int(TM / 3600)
    timeN = Int((TM Mod 3600) / 60)
    timeS = Int((TM Mod 3600) Mod 60)

    SetTime = timeH & "時" & timeN & "分" & timeS & "秒"

End Function

'クリック時イベントの処理
Private Sub コマンド1_Click()
    Me.テキスト1 = Time
    Me.テキスト2 = Timer
    Me.テキスト3 = SetTime(Timer)
End Sub

● 動作確認 ●
フォームビューに変更し、コマンドボタンをクリックして下さい。
そうすると、[テキスト1]にはTime関数によって算出されたシステム時刻、[テキスト2]にはTimer関数によって算出された午前0時からの経過秒数、[テキスト3]には、ユーザー定義関数によってTimer関数の結果から変換された時分秒が表示されます

※ Time関数の時間とユーザー関数の時間に1秒のズレが生じることがあります
※ これはユーザー関数内の計算時間のためのロスです


● 詳細 ●
ユーザー定義関数では、まずTimer関数によって取得した秒数を3600で割って時間を取得しています。
次に取得した秒数を3600で割った余りを求め、更に60で割ることによって分数を求めています。
最後に、上記の要領で分数を取り出した際の余りを更に60で割り、結果秒数を取得しています。

Timer関数によって与えられる秒数は小数点以下を含みますので、それぞれInt関数によって整数化してから、変数に格納しています。
それを最後に「時分秒」という文字と結合し、このユーザー関数の戻り値としています。