1桁月日の変換

VBAで日付を扱う際に、月や日が1桁になることがあります。2020/1/8 とかですね。

これを0埋めして 2020/01/08 としたいことがあります。

対応方法にはFormat関数を利用する方法とRight関数を利用する方法の2通りがあります。


Format関数での対応方法

Format関数で年月日の書式を固定長にすると0埋めした状態の日付が取得できます。

変換前の引数の日付文字列が日付として正しいのかチェックした上でFormat関数で書式を揃えます。



Format関数対応の使用例

処理結果
2017/11/01
2017/01/01
2017/11/02
2017/01/17
2017/12/11
(空文字が出力)

4行目は年月のみで日がありませんが、一日とみなして処理されています。

6行目は1桁月日に対して0埋めが行われています。

8行目は年が2桁ですが正しく処理されています。

10行目は年が2桁で日がありませんが、年は正しく変換され、日は一日とみなして処理されています。

12行目は変換が不要のため元文字列のまま出力されています。

14行目は5桁の年が不正とされています。それほど頻度は無いと思いますが、5桁の年度を扱う場合は別の考慮が必要になります。


Right関数での対応方法

元の文字列に0をつけて、あとで必要な桁数だけ切り出す方法です。

Format関数での方法と比べて、いくつかの考慮が必要になります。



Right関数対応の使用例

テスト内容はFormat関数版と同じです。



Format版とRight版のどちらがよいか

Format版とRight版、どちらも同じ動作をしますが、結論から言うとFormat版を利用した方がよいです。1番の理由はコードが単純なためです。

もう一つはほんの少しだけですがRight版よりも処理速度が速いためです。以下のコードで処理速度を検証したのですが、10回程度実行しましたが、平均すると若干Format版の方が速いようです。ただ、Right版が速いこともありました。

いずれにしてもどちらも高速に処理は行われているため、処理速度は気にしなくてもいいと考えます。

計測結果
Format関数版で掛かる時間:0.203125秒
Right関数版で掛かる時間:0.20166015625秒
Format関数版で掛かる時間:0.18896484375秒
Right関数版で掛かる時間:0.189453125秒