Excel VBAで戸惑った時刻の表記法
1. はじめに
便利ツールの作成には、Excel VBAが重宝する。例えば、「ログからデータを収集してグラフに表示する」という話は、非常に得意である。この時、時刻の取り扱いにおいて不可解な事象に遭遇したので、その話をまとめる。
2. Excelの時刻表示
ことの発端は、ログに書かれている時刻をセルにコピーする際に発生した。下記にイメージのプログラムを示す。
Sub Test()
Dim dateStr As String
dateStr = "10:50:11.333"
Range("A1").Value = dateStr
End Sub
このプログラムは、dateStr変数に時分秒ミリを代入し、A1セルに設定するプログラムである。なお、セルの書式設定をh:mm:ss.000としている。
このプログラムを実行すると、A1セルには10:50:11.333と表示される。実行結果には何の問題もなさそうに見える。
しかし、中身を確認すると、「.333」が抜けている。
そのため、セルを選択してエンターを押すと、ミリ秒が消えてしまう。
3. 原因はExcelの書式にある?
筆者は解決方法がわからず、ChatGptで原因を尋ねると、下記の回答があった。
恐らく、ミリ秒を除くどこかの基準の時刻を1としてそれを加算しているようだ。よって、セルの書式設定のユーザ定義にミリ秒を含む形式を設定しても、無視される。
4. 解決策
解決策は、セルのフォーマットを文字列に設定する。
Sub Test()
Dim dateStr As String
dateStr = "10:50:11.333"
'書式を文字列に設定する
Range("A1").NumberFormat = "@"
Range("A1").Value = dateStr
End Sub
上記は、A1セルのフォーマットを文字列に設定し、時刻を設定している。この時の実行結果は下記に示す通り、ミリ秒まで記載されている。
ミリ秒を含む時刻をセルに代入するには、フォーマットを文字列に設定してから代入する必要がある。
5. おわりに
今回は、Excel VBAで時刻をセルに代入する場合、ミリ秒が消え、戸惑ってしまった話を取り上げた。VBAで時刻を扱う場合には、注意してほしい。
この記事が気に入ったらサポートをしてみませんか?