10/08/2023

Excel。VBA。日付が8桁の数値だったので、年月日の日付にするにはどうするの?【date is numeric】

Excel。VBA。日付が8桁の数値だったので、年月日の日付にするにはどうするの?

<Excel VBA>

インポートしたら、日付が8桁の数値になっていました。


これでは、日付としてつかえないので、「/(スラッシュ)」や年月日の日付にするには、どうしたらいいのでしょうか。


まして、大量のデータ。

日付が8桁の数値

 

そこで、Excel VBAでプログラムを作って対応することにしました。


Sub 数値を日付()

    Dim i As Integer

    Dim row_count As Integer

    Dim nen As String

    Dim tuki As String

    Dim niti As String

   

    row_count = Range("A1").End(xlDown).Row


    For i = 2 To row_count

        nen = Mid(Cells(i, "a"), 1, 4)

        tuki = Mid(Cells(i, "a"), 5, 2)

        niti = Mid(Cells(i, "a"), 7, 2)

           

        Cells(i, "b") = nen & "/" & tuki & "/" & niti

        Cells(i, "c") = nen & "/" & tuki & "/" & niti

        Cells(i, "c").NumberFormatLocal = "yyyy年m月d日"

    Next

End Sub


A列の8桁の数値が、B列は「/(スラッシュ)」でC列は「年月日」の日付にすることができました。


それでは、プログラム文を確認します。


変数の宣言ですね。

Dim nen As String

Dim tuki As String

Dim niti As String


これは、年・月・日を格納するための変数です。


row_count = Range("A1").End(xlDown).Row

For to Next文で繰り返し処理をしますので、その回数を得るためのrow_countという変数を用意しました。


nen = Mid(Cells(i, "a"), 1, 4)

tuki = Mid(Cells(i, "a"), 5, 2)

niti = Mid(Cells(i, "a"), 7, 2)

ここでは、Mid関数をつかって、A列のデータを抽出しています。


例えば、「nen = Mid(Cells(i, "a"), 1, 4)」だと、nenという変数に年を格納しますが、文字列の1文字目から4文字を抽出するという意味です。


同じように、月と日も抽出し格納します。


Cells(i, "b") = nen & "/" & tuki & "/" & niti

変数と「/(スラッシュ)」を「&(アンパサンド)」で結合することで、日付にすることができます。


これで、「/(スラッシュ)」の日付にすることができました。


では、年月日はというと、一発でできないので、最初「/(スラッシュ)」の日付を作ります。


Cells(i, "c") = nen & "/" & tuki & "/" & niti


そのあと、表示形式の「NumberFormatLocal」プロパティをつかって、年月日に表示形式を変更します。


Cells(i, "c").NumberFormatLocal = "yyyy年m月d日"


このようにすれば、手早く、8桁の数値を日付にすることができます。