【コピペでOK】Excelのカレンダー作りはもうやめない?VBAで「毎月30分の単純作業」を「1秒」にする方法

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
突然ですが、毎月の「カレンダー作成」にどれくらいの時間を使っていますか?

日付を打ち直し、曜日を修正し、土曜日は青色、日曜日は赤色、祝日を確認して……。

もしこの作業に毎月30分かけているとしたら、年間で6時間も「ただ表を作るだけ」に費やしていることになります。これ、もったいないですよね。

そこで今回は、こうした事務作業の負担をExcel VBAによって一瞬で解消する方法をご紹介します。 

プログラミングの知識がなくても、「コピー&ペーストしてボタンを押すだけ」で動作する便利なコードをご用意しました。

【業務効率化】VBAの記事を見る 

VBAによるカレンダー作成を推奨する理由

「既存のテンプレートを活用すれば十分ではないか」

そう感じる方もいらっしゃるかもしれません。 

でも、実務では指定のフォーマットに合わせたり、特定の箇所にメモ欄を設けたりといった、細かな調整が求められる場面が多いものです。 

VBA(マクロ)を導入すれば、ご自身の業務に最適化されたカレンダーを、正確かつ瞬時に作成できるようになります。 

何より、手作業で発生しがちな日付の入力ミスや色付けの漏れを完全に排除できる点が、最大のメリットと言えるでしょう。

コピペで使える!カレンダー自動生成VBAコード

では、さっそくコードをご紹介します。

以下の手順に従って、Excelへ反映させてみてください。 

  1. Excelを開き、[Alt] + [F11] キーを押す。
  2. メニューの「挿入」→「標準モジュール」をクリック。
  3. 出てきた白い画面に、以下のコードを全てコピペする。
Sub カレンダー作成()
    ' 変数の宣言

    Dim 年 As Integer
    Dim 月 As Integer
    Dim 月初日 As Date
    Dim 月末日 As Date
    Dim i As Integer
    Dim 行 As Integer
   
    ' 画面の更新を止めて高速化
    Application.ScreenUpdating = False

    ' ① 何年何月のカレンダーを作るか確認
    On Error Resume Next ' キャンセル対策
        年 = InputBox("西暦を入力してください(例:2026)", "年の指定", Year(Date))
        月 = InputBox("月を入力してください(例:1)", "月の指定", Month(Date))
    On Error GoTo 0
   
    If 年 = 0 Or 月 = 0 Then Exit Sub ' キャンセルされた場合は終了

    ' ② シートを初期化して見出しを作成
    Cells.Clear
    Range("A1").Value = 年 & "年 " & 月 & "月"
    Range("A1").Font.Size = 16
    Range("A1").Font.Bold = True
   
    ' 曜日の見出しを入力(A3セルから開始)
    Range("A3").Value = "日付"
    Range("B3").Value = "曜日"
    Range("C3").Value = "予定・メモ"
   
    ' 列幅を調整
    Columns("C").ColumnWidth = 40 ' メモ欄を広く

    ' ③ 日付データを計算して書き込む
    月初日 = DateSerial(年, 月, 1)
    月末日 = DateSerial(年, 月 + 1, 0)
   
    行 = 4 ' 4行目から日付スタート
   
    ' 1日から月末まで繰り返す
    For i = 0 To Day(月末日) - 1
        Cells(行, 1).Value = 月初日 + i          ' 日付
        Cells(行, 2).Value = Format(月初日 + i, "aaa") ' 曜日
       
        ' 土日の色付け(土曜:青、日曜:赤)
        Select Case Weekday(月初日 + i)
            Case vbSaturday
                Range(Cells(行, 1), Cells(行, 3)).Interior.Color = RGB(220, 230, 255) ' 薄い青
                Cells(行, 2).Font.Color = vbBlue
            Case vbSunday
                Range(Cells(行, 1), Cells(行, 3)).Interior.Color = RGB(255, 220, 220) ' 薄い赤
                Cells(行, 2).Font.Color = vbRed
        End Select
       
        行 = 行 + 1
    Next i

    ' 格子状に枠線を引く
    Range("A3:C" & 行 - 1).Borders.LineStyle = xlContinuous
   
    ' 画面更新を再開
    Application.ScreenUpdating = True

    MsgBox "カレンダーができました!", vbInformation
End Sub

貼り付けたら、Excelの画面に戻って [Alt] + [F8] を押し、「カレンダー作成」を選んで「実行」ボタンを押してみてください。

入力画面が表示されますので、年月を指定するだけで、瞬時にカレンダーが完成します!

▼完成例

本コードの主要な3つのポイント

  1. InputBox(インプットボックス)ユーザーと対話するためのツールです。作成したい年月を尋ねる役割を担います。 
  2. DateSerial(デイトシリアル) 入力された数値を日付データに変換します。この機能により、うるう年の計算なども自動で行われます。 
  3. For ~ Next(繰り返し) 1日から月末まで、日付の記入や着色といった定型作業を反復します。正確かつ高速な処理は、コンピュータが最も得意とする領域です。 

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました