Excelで月を入れるとカレンダーが自動作成されるマクロ!1か月分の日付シート生成!

Excelで月を入れるとカレンダーが自動作成されるマクロ!シート別に生成!

Excelで月を入れるとカレンダーが自動で作成する方法を知りたいときはないでしょうか。

けど、そんな中で悩むことは、

・Excelで月を入れるとカレンダーが自動で作成する方法を知りたいがわからない
Excel関数でカレンダーを自動作成したが数式が複雑かつ、月末日の調整が必要で面倒

ですよね。

今回はそんなお悩みを解決する

・Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成する方法

についてまとめます!

タカヒロ
タカヒロ
Excel関数は一切つかいませんので、複雑な数式の設定をしたり、値が勝手に変わってしまったりする心配はありません!

Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成するイメージ

Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成するイメージについて説明をします。

まずExcel1シート目を設定シートとして、年と月を入れるセルを用意し、カレンダーを作成したい値をいれます。

VBAとボタンを設置して、ボタンを押すと、

カレンダーが自動作成されます!

他の月も連続で作成が可能です!

さらに日付フォーマットの変更も可能です!!

早速つくってみましょう!

タカヒロ
タカヒロ
カレンダーがワンクリックでできるのでとても便利ですね!月末日も自動で計算されるところもうれしいですね。

Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成する方法

Excel VBAで年月を指定し1か月分のカレンダーをシート別に自動作成する方法について説明をします。

年月を指定するシートを用意する

年月を指定するシートを用意しましょう。
サンプルではB2セルを年、B3セルを月の値を入れる箇所としました。

作成したいカレンダーの年と月をそれぞれのセルに入力してください。

ボタンは、開発タブの挿入>コントロールフォーム>ボタンをクリックしてボタンを挿入してください。

ボタンの表記は適当に変更してください。

タカヒロ
タカヒロ
マクロの登録はVBA実装後におこないますので、一旦このままで結構です。

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 '予定

さいごに

いかがでしょうか。

今回は、

・Excel VBAで年月を指定しカレンダーをシート別に自動作成する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。









コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です