マクロで文字列から日付を作成
マクロ講座73回
文字列から日付を作成 Excel2013 マクロ講座 73回
年月を指定して日付を作成
今回はマクロを使ってカレンダーの日付を入力する例を紹介します。
日付は関数で入力できますが、その場合シートには数式が入力されています。
マクロの場合は直接セルに日付を入力したりできるので、数式を変更されたりする心配をしないですみます。
月の日付を取得し曜日に書式設定し、それを日数分繰り返します。この回では、DateSerial関数、Format関数、For~Nextステートメントを利用します。
(サンプルファイルは、こちらから マクロ73回サンプルデータ)
DateSerial関数で日付データを作成
マクロ講座 72回で利用したDateSerial関数を使います。DateSerial関数は、引数に指定した年、月、日に対応する日付をシリアル値で返すVBA関数です。
DateSerial関数の引数として、YearにはA1セル、MonthにはD1セル、DayにはA3セルを指定します。
年月日に該当する変数として、yy,mm,ddを As Integerで宣言しました。
Sub 文字列から日付1() ThisWorkbook.Worksheets("Sheet1").Activate With ActiveSheet Dim yy As Integer, mm As Integer, dd As Integer yy = .Range("A1").Value mm = .Range("D1").Value dd = .Range("A3").Value .Range("B3") = DateSerial(Year:=yy, Month:=mm, Day:=dd) End With End Sub
B3セルに書式を設定しない状態でコードを実行すると、次のように入力されます。
そこで、 Format関数を使って、セルの書式を設定することにします。8行目のコードを以下のように変更します。
'Format関数にDateSerial関数をネストします。 .Range("B3") = Format(DateSerial(Year:=yy, Month:=mm, Day:=dd), "(aaa)")
コードを実行すると、今回は日付からその日付の曜日を表示することができます。
指定回数の繰り返し
サンプルはカレンダーなので、日付に対応する曜日を指定回数繰り返す必要があります。繰り返しは、お馴染みの
For~Nextステートメントを使います。
繰り返す回数は、その月の日数分です。つまり末日が日数ということになります。
繰り返す回数は、その月の日数分です。つまり末日が日数ということになります。
カウンタ変数としてi As Integerを宣言、開始値は1から、終了値は matsu As Integerを宣言します。
翌月の0日が末日として取得できます。
末日を取得するコードは、
matsu = Day(DateSerial(Year:=yy, Month:=mm + 1, Day:=0))次にFor文のコードは、
For i = 1 To matsu dd = .Cells(i + 2, 1).Value .Cells(i + 2, 2) = Format(DateSerial(Year:=yy, Month:=mm, Day:=dd), "(aaa)") Next
コードをまとめると、以下の様になります。
Sub 文字列から日付3() '該当月の日数分の回数繰り返し ThisWorkbook.Worksheets("Sheet1").Activate With ActiveSheet Dim yy As Integer, mm As Integer, dd As Integer, i As Integer, matsu As Integer yy = .Range("A1").Value mm = .Range("D1").Value matsu = Day(DateSerial(Year:=yy, Month:=mm + 1, Day:=0)) For i = 1 To matsu dd = .Cells(i + 2, 1).Value .Cells(i + 2, 2) = Format(DateSerial(Year:=yy, Month:=mm, Day:=dd), "(aaa)") Next End With End Sub
実行すると、該当月の日数分の曜日が入力されます。
今回のマクロは、指定された年、月から日付を取得して、それを曜日として表示するマクロを繰り返しました。
また複数のワークブックを同時に開いている場合に、マクロを登録したブックだけに作用することを意図しているので、「ThisWorkbook」を指定しています。
お疲れ様でした。