Excelで月を入れるとカレンダーが自動で作成する方法を知りたいときはないでしょうか。
けど、そんな中で悩むことは、
Excel関数でカレンダーを自動作成したが数式が複雑かつ、月末日の調整が必要で面倒
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
もくじ
Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成するイメージ
Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成するイメージについて説明をします。
まずExcel1シート目を設定シートとして、年と月を入れるセルを用意し、カレンダーを作成したい値をいれます。
VBAとボタンを設置して、ボタンを押すと、
カレンダーが自動作成されます!
他の月も連続で作成が可能です!
さらに日付フォーマットの変更も可能です!!
早速つくってみましょう!
Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成する方法
Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成する方法について説明をします。
年月を指定するシートを用意する
年月を指定するシートを用意しましょう。
サンプルではB2セルを年、B3セルを月の値を入れる箇所としました。
作成したいカレンダーの年と月をそれぞれのセルに入力してください。
ボタンは、開発タブの挿入>コントロールフォーム>ボタンをクリックしてボタンを挿入してください。
ボタンの表記は適当に変更してください。
VBAコード
年月を指定しカレンダーをシート別に自動作成するVBAコードは以下の通りです。
Sub カレンダー自動作成()
Dim intYear As Integer
Dim intMonth As Integer
Dim strSheetName As String
Dim dateFirstDay As Date
Dim dateLastDay As Date
Dim dateCurrentDay As Date
Dim intRow As Integer
With Sheets(1)
'年と月の値を取得します。
intYear = .Range("B2").Value
intMonth = .Range("B3").Value
End With
'日付出力開始行を指定します。
intRow = 3
'新しいシートを追加します。
strSheetName = intYear & "年" & intMonth & "月"
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = strSheetName
With Sheets(Sheets.Count)
'シートのタイトルを設定します。
.Range("A1").Value = strSheetName & "のカレンダー"
'項目名を設定します。
.Range("A2").Value = "日付"
.Range("B2").Value = "曜日"
.Range("C2").Value = "予定"
'日付と曜日を計算します。
'月初を算出します。
dateFirstDay = DateSerial(intYear, intMonth, 1)
'月末を算出します。
dateLastDay = DateSerial(intYear, intMonth + 1, 0)
'月初日を計算用変数に代入します。
dateCurrentDay = dateFirstDay
'月初から月末まで処理を繰り返します。
While dateCurrentDay <= dateLastDay
'日付を出力します。
.Range("A" & intRow).Value = Format(dateCurrentDay, "yyyy年mm月dd日")
'曜日を出力します。
.Range("B" & intRow).Value = Format(dateCurrentDay, "aaa")
dateCurrentDay = dateCurrentDay + 1
intRow = intRow + 1
Wend
'列幅を調整します。
.Columns("A:A").ColumnWidth = 15 '日付
.Columns("B:B").ColumnWidth = 5 '曜日
.Columns("C:C").ColumnWidth = 35 '予定
End With
MsgBox strSheetName & "のカレンダーを作成しました!"
End Sub
VBAを設定する
年月を指定しカレンダーをシート別に自動作成するVBAの設定を行います。
日付出力開始行を指定します。例えば3の場合はカレンダーの日付は3行目から入る形になります。
intRow = 3
カレンダー日付の列幅を調整します。それぞれの項目の横幅を設定してください。
.Columns("A:A").ColumnWidth = 15 '日付
.Columns("B:B").ColumnWidth = 5 '曜日
.Columns("C:C").ColumnWidth = 35 '予定
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
ボタンにマクロを登録する
設置したボタンを右クリックし、「マクロの登録」をクリックします。
マクロの一覧から「カレンダー自動作成」を選択し、「OK」をクリックすれば登録完了です。
VBAを実行する
「カレンダー自動作成」マクロを実行してみましょう。
「YYYY年MM月のカレンダーを作成しました!」が出ればOKです。
はい!1か月分のカレンダーシートが作成され、日付と曜日が入っていますね!
別の月のカレンダーも作成してましょう。
はい、カレンダーが追加されていますね!
日にちのみのカレンダーを作成する
次に日にちのみのカレンダーを作成すしてみましょう。
以下の箇所を設定変更します。
日付書式を”d日”とします。
.Range("A" & intRow).Value = Format(dateCurrentDay, "d日")
日付のセルの幅を狭く設定します。
.Columns("A:A").ColumnWidth = 7 '日付
マクロを実行してみましょう。
はい!日にちのみに変更されていますね!
なお、一桁の場合「0」を頭につけたいときは、日付の書式を”dd日”としてください。
以下実行結果です。
VBAの説明
年月を指定しカレンダーをシート別に自動作成するVBAについて説明をします。
1シート目に入力した年と月の値を取得します。
With Sheets(1)
intYear = .Range("B2").Value
intMonth = .Range("B3").Value
End With
日付出力開始行を指定します。
intRow = 3
新しいシートを追加します。シート名はYYYY年MM月としています。
strSheetName = intYear & "年" & intMonth & "月"
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = strSheetName
シートのタイトルを設定します。
.Range("A1").Value = strSheetName & "のカレンダー"
項目名を設定します。
.Range("A2").Value = "日付"
.Range("B2").Value = "曜日"
.Range("C2").Value = "予定"
日付と曜日を計算します。
月初を算出します。
dateFirstDay = DateSerial(intYear, intMonth, 1)
月末を算出します。
dateLastDay = DateSerial(intYear, intMonth + 1, 0)
月初日を計算用変数に代入します。
dateCurrentDay = dateFirstDay
月初から月末まで処理を繰り返します。
While dateCurrentDay <= dateLastDay
日付を出力します。
.Range("A" & intRow).Value = Format(dateCurrentDay, "yyyy年mm月dd日")
曜日を出力します。
.Range("B" & intRow).Value = Format(dateCurrentDay, "aaa")
列幅を調整します。
.Columns("A:A").ColumnWidth = 15 '日付
.Columns("B:B").ColumnWidth = 5 '曜日
.Columns("C:C").ColumnWidth = 35 '予定
さいごに
いかがでしょうか。
今回は、
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す