1/10秒や1/100秒の時間計算
1/10秒や1/100秒単位の時間の計算をしようとしたら
案外難しいという話です。
セルに直接入力する方法では、
例えば「02:02.9」と入力すると
自動でセルの書式設定が「mm:ss.0」に変更されます。
(「02:02.23」では、セルの書式設定が「mm:ss.00」に変更される。)
ですので、意図したとおりの値が入力できます。
試しに「02:02.9」と入力したセルの書式設定を
「標準」に変更してみてください。
「02:02.9」と言う値は文字列ではなく
日付をあらわす小数の値「0.0014…」として入力されていることがわかります。
日付をあらわす小数の値については以下の記事を参照してください。
『日時と時間』
時間の値が意図したとおりに入力されているので
単純に「=A1-A2」と入力すれば差を計算できます。
(1/100秒単位も同様に計算できる。B列参照)
以上の操作をVBAでしてみます。
まず、「02:02.9」を「0.0014…」の値に変換するのに工夫が必要です。
秒単位までならTimeValue関数を使って
TimeValue("00:02:02")
とすればよいのですが、1/10秒や1/100秒単位ではうまくいきません。
TimeValue("02:02.9")
の値は2時間2分9秒になってしまいます。
ですので、秒までの時間はTimeValue関数を使い、
1/10秒や1/100秒は別で付加する方法で時間の計算をしていきます。
まず、
TimeValue("00:" & LEFT("02:02.9",5))
で2分2秒の部分を小数の値に変換します。
次に
1/10秒=1/24/60/60/10
0.9秒=9/10秒=9/24/60/60/10 なので
Right("02:02.9", 1) / 24 / 60 / 60 / 10
で0.9秒部分の小数の値が得られます。
以上をまとめたコードがこちら
Sub macro180103a() Dim MyTime As
String |
実行結果:
これを応用して
ある時間(MyTime1)とある時間(MyTime2)の
1/10秒単位の時間差を計算します。
コードはこちら
Sub macro180103b() Dim MyTime1 As
String, MyTime2 As String |
実行結果:
折角なので1/10秒単位の時間差を計算する関数を
上記コードを改造して作っておきます。
コードはこちら
Sub macro180103c() Cells(1, 1) =
TimeCul10("02:02.9", "02:02.5") TimeCul10
= CDbl(TimeValue("00:" & Left(MyTime1, 5)) _ End Function |
macro180103cの実行結果:
1/100秒単位の計算の関数も作ってみました。
1/10秒単位との違いを探してみてください。
Sub macro180103d() Cells(1, 1) =
TimeCul100("02:02.23", "02:02.11")
TimeCul100 = CDbl(TimeValue("00:" & Left(MyTime1, 5)) _ End Function |
macro180103dの実行結果:
VBAで計算するのが手間だと感じる人は
シートに値を入力して
シート内で計算をして
計算結果をシートから取り出して利用する方法もありです。
| 固定リンク
この記事へのコメントは終了しました。

コメント