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


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

'Format関数にDateSerial関数をネストします。
.Range("B3") = Format(DateSerial(Year:=yy, Month:=mm, Day:=dd), "(aaa)")
繰り返す回数は、その月の日数分です。つまり末日が日数ということになります。
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
