5/14/2023

Excel VBA。年・月・日に分割されているので、日付を手早くつくりたい。【Date】

Excel VBA。年・月・日に分割されているので、日付を手早くつくりたい。

<VBA: DateSerial関数>

データを読み込むと、次のように、年月日がそれぞれ別の列になっていました。

作業上、不便なので、日付をつくりたいわけですね。


DATE関数をつかえば、簡単にD列に日付を設定することができますが、データを読み込んだ後に、自動的に日付を作るようにできれば、さらに作業効率が改善できるというわけですね。


そこで、Excel VBAをつかってD列に日付を設定するプログラム文をつくってみます。

Sub 日付作成()

    Dim i As Long

    Dim lastrow As Long

    

    lastrow = Cells(Rows.Count, "a").End(xlUp).Row


    For i = 2 To lastrow

        Cells(i, "d") = DateSerial(Cells(i, "a"), Cells(i, "b"), Cells(i, "c"))

    Next

End Sub


とりあえず、実行してみます。

DateSerial関数

 

D列に日付が設定されてました。

プログラム文を確認しておきましょう。


まずはお馴染みの変数宣言ですね。

Dim i As Long

このあとFor~Next文で繰り返しのカウントでつかいます。


Dim lastrow As Long

For~Next文で何回繰り返し処理をすればいいのかを指示するために、データの最終行のセル番号をいれるための変数です。


その最終行の行数を算出するのが次の処理です。

lastrow = Cells(Rows.Count, "a").End(xlUp).Row



ここからがメインの処理です。

For i = 2 To lastrow

    Cells(i, "d") = DateSerial(Cells(i, "a"), Cells(i, "b"), Cells(i, "c"))

Next


D列に日付を表示するための処理

DateSerial(Cells(i, "a"), Cells(i, "b"), Cells(i, "c"))


ここで注意するのは、「Date」ではなくて「DateSerial」ということですね。


Cells(i, "d") = Date(Cells(i, "a"), Cells(i, "b"), Cells(i, "c"))

とすると、コンパイルエラーが表示されます。


このDateは、次のように設定します。


Cells(i, "d") = Date()


ただ、これは、今日の日付を設定するときつかいます。

Accessと同じというわけですね。


要するに、

ExcelのDATE関数と同じように、Excel VBAでつかうには、「DateSerial関数」を使用します。


ExcelのTODAY関数と同じように、Excel VBAでつかうには、「Date関数」を使用します。



そのため、「DateSerial関数」を使用する必要がありますので、注意が必要ですね。