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

  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
関数によって整数化してから、変数に格納しています。
  それを最後に「時分秒」という文字と結合し、このユーザー関数の戻り値と
しています。


Access97/2000



戻る


Excel Word Access VBA! モーグ