Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » 8桁のyyyymmdd形式の数字を日付に変換するExcelマクロ

8桁のyyyymmdd形式の数字を日付に変換するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

「excel vba 8桁の数値を日付にする」
「エクセル vba 8桁の文字列日付に変更」
「エクセルマクロ 8桁数字を日付型に」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

年・月・日の数字をつなげた「20140612」といった「yyyymmdd」形式の8桁の数字を、日付データに変換するExcel マクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。

[スポンサードリンク]

Mid関数とスラッシュで日付に変換するサンプルマクロ

分かりやすいのは、Mid関数と「/」(スラッシュ)を使って日付データに変換する方法でしょう。

Sub アクティブセルの8桁の数字を日付にする()
 Dim org As String
 Dim buf As String

 With ActiveCell
  org = .Value
  If Len(org) = 8 Then
   buf = _
    Mid(org, 1, 4) & "/" & _
    Mid(org, 5, 2) & "/" & _
    Mid(org, 7, 2)
   If IsDate(buf) = True Then
    .Value = buf
    .NumberFormatLocal = "yyyy年m月d日"
   End If ' IsDate
  End If ' Len = 8
 End With ' ActiveCell
End Sub

「20140612」のようなyyyymmdd形式の、8桁の数字が入力されているセルを選択した状態で、上記のマクロを実行すると「2014年6月12日」という日付データに変換されます。

アクティブセルの値を変数・orgに格納して、
 With ActiveCell
  org = .Value

8桁の文字列だったときに、
  If Len(org) = 8 Then

変数・bufに「yyyy/mm/dd」という形に整形した文字列を格納します。
   buf = _
    Mid(org, 1, 4) & "/" & _
    Mid(org, 5, 2) & "/" & _
    Mid(org, 7, 2)

Mid関数は、第1引数に指定された文字列から、第2引数に指定された位置の文字から、第3引数に指定された文字数分の文字列を取得する関数です。

「Mid(org, 1, 4)」でorgの1文字目から4文字(年の数字)
「Mid(org, 5, 2)」でorgの5文字目から2文字(月の数字)
「Mid(org, 7, 2)」でorgの7文字目から2文字(日の数字)
がそれぞれ取得できるので、その間に「/」を入れているのが
    Mid(org, 1, 4) & "/" & _
    Mid(org, 5, 2) & "/" & _
    Mid(org, 7, 2)
の意味です。

その「/」を入れた文字列が、日付データとして扱えをどうかをIsData関数で確認してOKならば、
   If IsDate(buf) = True Then

アクティブセルの値を変数・bufに格納されている文字列に書き換え、
    .Value = buf

書式の設定を行っています。
    .NumberFormatLocal = "yyyy年m月d日"

Format関数で日付に変換するサンプルマクロ

同じことを、Format関数を使っても行うことができます。

Sub アクティブセルの8桁の数字を日付にする_Format関数()
 Dim org As String
 Dim buf As String

 With ActiveCell
  org = .Value
  If Len(org) = 8 Then
   buf = Format(org, "@@@@/@@/@@")
   If IsDate(buf) = True Then
    .Value = buf
    .NumberFormatLocal = "yyyy年m月d日"
   End If ' IsDate
  End If ' Len = 8
 End With ' ActiveCell
End Sub

考え方はほとんど同じで、違うのは、先ほどのサンプルマクロで
   buf = _
    Mid(org, 1, 4) & "/" & _
    Mid(org, 5, 2) & "/" & _
    Mid(org, 7, 2)
となっていた部分が、
   buf = Format(org, "@@@@/@@/@@")
になっていることだけです。

Format関数の第2引数に「"@@@@/@@/@@"」と指定することで、「yyyymmdd」という文字列を「yyyy/mm/dd」という文字列に変換しています。

A列のデータを日付に変換するサンプルマクロ

以下のようなマクロにすれば、A列に入力されている8桁の数字をまとめて日付データに変換できます。

Sub A列の8桁の数字を日付にする()
 Dim org As String
 Dim buf As String
 Dim i As Long

 For i = 1 To Range("A1").End(xlDown).Row
 With Cells(i, "A")
  org = .Value
  If Len(org) = 8 Then
   buf = Format(org, "@@@@/@@/@@")
   If IsDate(buf) = True Then
    .Value = buf
    .NumberFormatLocal = "yyyy年m月d日"
   End If ' IsDate
  End If ' Len = 8
 End With ' Cells(i, "A")
 Next i
End Sub

A1セルからA列の最後のデータまでループを回して、
 For i = 1 To Range("A1").End(xlDown).Row
 With Cells(i, "A")

先のFormat関数を使ったのと同じロジックで変換しています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » 8桁のyyyymmdd形式の数字を日付に変換するExcelマクロ

「VBA関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.