7/11/2022

Excel。VBA。年月日が別々の列あるので、結合して手早く日付にしたい【DATE】

Excel。VBA。年月日が別々の列あるので、結合して手早く日付にしたい

<Excel VBA:DateSerial>

データを読み込んでみたら、日付ではなくて、年月日が別々の列に入力されていました。


DATE関数をつかえば、年月日を結合させて、日付のデータにすることができます。


ただ、データを読み込むたびに、DATE関数をつくって、オートフィルで数式をコピーするのは面倒です。


そこで、Excel VBAでプログラムをつくって、データを読み込んだのと同時に日付をつくってしまえば、作業効率が改善しそうです。


Excel VBAのプログラム文で、DATE関数をつかいそうですが、効率がいいものがありますので、次のようにプログラム文をつくってみました。


Sub 日付()

    Dim i As Long

    Dim lastrow As Long

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


    For i = 2 To lastrow

        Cells(i, "e") = DateSerial(Cells(i, "a").Value, Cells(i, "b").Value, Cells(i, "c").Value)

    Next

End Sub


参考として、A列からC列までの年月日のデータをつかって、E列に日付をつくるようにしましたので、まずは、実行して確認します。


DATE関数をつくって、日付をつくったわけではないので、E列には日付そのものをつくれています。


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

基本的には、一行だけのシンプルなプログラム文です。


Dim i As Long

Dim lastrow As Long


変数宣言です。

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

変数のlastrowには、データの最終レコード行を代入します。

このデータは次のFor~To~Next文での繰り返しカウントとしてつかいます。


For i = 2 To lastrow

    Cells(i, "e") = DateSerial(Cells(i, "a").Value, Cells(i, "b").Value, Cells(i, "c").Value)

Next


繰り返し文の中は、DateSerialプロパティをつかって、日付にしています。

DATE関数と同じ使い方なのが、DateSerialプロパティです。


DateSerialプロパティの引数は、

DateSerial(年の値,月の値,日の値)

となっていますので、それぞれの列を当てはめてあげればいいだけです。


DATE関数でも、全く問題はありませんが、データ量が多い、毎回同じ処理をして面倒などの場合は、簡単な処理であっても、Excel VBAでプログラム文をつくってみてもいいかもしれませんね。