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でプログラム文をつくってみてもいいかもしれませんね。