0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAで秒未満

Posted at

 Excelで1秒未満の時間を扱いたい。具体的にはスポーツのタイムの記録で,1/100秒単位である。
 セルの表示形式をm:ss.00にし,3分45.67秒を3:45.67と入力するとちゃんと表示される。
 さて,VBAである。以下,必要な精度は1/100秒だが,誤差が出ていないかを見るため,表示形式をm:ss.000にしている。時間を発生するTimeSerial関数がある。しかし,これの秒(第3引数)は整数である。

    Cells(1, 1) = TimeSerial(0, 3, 45.67)

と,45.67と実数にしても文句は出ないが,結果は45.67秒ではなく46秒になる。あれえ。
 では,TimeSerialで作った45秒に0.67秒を足すか。まず,0.01秒は作れるか。

    Dim ts, tcs
    ts = TimeSerial(0, 0, 1)
    tcs = 0.01 * ts
    Cells(1, 1) = tcs

これはOK。0.67秒は作れるか。

    tss = 67 * tcs

これもOK。では足す。

    ti = TimeSerial(0, 3, 45)
    t = ti + tss

あれえ,これは46秒である。TimeSerialの結果はVariant (Date)というものらしいが,これは可能であれば1秒単位で丸めてしまおうとするもののようだ。
 VariantがダメならSingleにすればいいのか?以下にしたらできた。

    Dim rts As Single, rtcs As Single, rtss As Single, rti As Single
    rts = TimeSerial(0, 0, 1)
    rtcs = 0.01 * rts
    rtss = 67 * rtcs
    rti = TimeSerial(0, 3, 45)
    Cells(1, 1) = rti + rtss
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?