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