マクロで文字列から日付を作成

マクロ講座73回 
マクロで文字列から日付を作成

文字列から日付を作成 Excel2013 マクロ講座 73回

年月を指定して日付を作成

今回はマクロを使ってカレンダーの日付を入力する例を紹介します。 日付は関数で入力できますが、その場合シートには数式が入力されています。 マクロの場合は直接セルに日付を入力したりできるので、数式を変更されたりする心配をしないですみます。
月の日付を取得し曜日に書式設定し、それを日数分繰り返します。この回では、DateSerial関数、Format関数、For~Nextステートメントを利用します。
(サンプルファイルは、こちらから マクロ73回サンプルデータ

DateSerial関数で日付データを作成

マクロ講座 72回で利用したDateSerial関数を使います。DateSerial関数は、引数に指定した年、月、日に対応する日付をシリアル値で返すVBA関数です。
文字列から日付を作成マクロ1
DateSerial関数の引数として、YearにはA1セル、MonthにはD1セル、DayにはA3セルを指定します。
文字列から日付を作成マクロ2
年月日に該当する変数として、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セルに書式を設定しない状態でコードを実行すると、次のように入力されます。
文字列から日付を作成マクロ3
そこで、 Format関数を使って、セルの書式を設定することにします。8行目のコードを以下のように変更します。

'Format関数にDateSerial関数をネストします。
    .Range("B3") = Format(DateSerial(Year:=yy, Month:=mm, Day:=dd), "(aaa)")
コードを実行すると、今回は日付からその日付の曜日を表示することができます。
文字列から日付を作成マクロ4

指定回数の繰り返し

サンプルはカレンダーなので、日付に対応する曜日を指定回数繰り返す必要があります。繰り返しは、お馴染みの For~Nextステートメントを使います。
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
実行すると、該当月の日数分の曜日が入力されます。 文字列から日付を作成マクロ5
今回のマクロは、指定された年、月から日付を取得して、それを曜日として表示するマクロを繰り返しました。 また複数のワークブックを同時に開いている場合に、マクロを登録したブックだけに作用することを意図しているので、「ThisWorkbook」を指定しています。 お疲れ様でした。