Digital_Neko

フリーランスプログラマー

Excel-VBA 8桁の数字を日付に変換

今回は、セルに入力されている8桁の数字を、日付に変換する方法を説明します。
セルの1行1列に

20200801

と入力されている場合を考えます。20200801を、セルの1行2列に2020/08/01と日付で出力する、サンプルプログラムは下記となります。

Dim myDate As Date
myDate = Format(Cells(1, 1).Value, ” ####/##/##”)
Cells(1, 2).NumberFormat = “yyyy/mm/dd”
Cells(1, 2).Value = myDate

もう一つのパターンも紹介します。セル1行3列に令和2年8月1日と出力します。

Dim myDate As Date
Dim Year As Integer, Month As Integer, Day As Integer

Year = Mid(Cells(1, 1).Value, 1, 4)
Month = Mid(Cells(1, 1).Value, 5, 2)
Day = Mid(Cells(1, 1).Value, 7, 2)
myDate = Year & “/” & Month & “/” & Day
Cells(1, 3).NumberFormat = “ggge年m 月 d 日”
Cells(1, 3).Value = myDate

8桁の数字を日付に変換する際のポイントは、
(1)日付型の変数を用意する。
(2)Format関数の数値表示書式指定文字を用いて、日付と同じ書式(シリアル値)になおす。
(3)日付型の変数に格納する。(日付になっていなければ、
   ここでオーバーフローするので確認できます。)
(4)セルの書式を設定する。
(5)セルに代入する。

2つ目のサンプルプログラムでは、8桁の数字をMid関数で、年、月、日に分けて、その後で結合して日付型の変数に格納しています。ユーザー定義関数を使ってシリアル値で出力する関数を作るのもありだと思います。