Excel中級者

Excelカレンダーの作り方|自動更新・祝日対応・シフト表まで完全解説

しんたろ。

Excelで万年カレンダーやシフト表を作りたい、でも毎月手動で日付を変更するのは面倒…そんな悩みを解決します。

Excelの関数(DATE・EOMONTH・TEXT・WEEKDAY等)を活用すれば、年月を変更するだけで日付・曜日・祝日が自動更新されるカレンダーを作成できます。

本記事では、基本の月間カレンダーから、シフト管理表、勤怠管理表まで、3種類のカレンダーの作り方を手順付きで解説します。

この記事でわかること
  • 年月を変えるだけで自動更新される万年カレンダーの作り方
  • 土日祝日を自動で色分けする方法
  • シフト管理表の作り方(記号入力・集計付き)
  • 勤怠管理表の作り方(出退勤時刻・残業計算)
  • 月末日を自動計算するEOMONTH関数の使い方
  • Microsoft公式テンプレートの活用方法
この操作、VBAで一瞬で自動化できます
まずは関数の使い方を解説し、最後にVBA自動化コードも紹介します
‘ 指定月のカレンダーを自動生成するマクロ
Sub カレンダー生成()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim yr As Long, mo As Long
    yr = 2026: mo = 3
    ws.Cells(1, 1).Value = yr & “年” & mo & “月”
    Dim headers As Variant
    headers = Array(“日”, “月”, “火”, “水”, “木”, “金”, “土”)
    Dim col As Long
    For col = 0 To 6
        ws.Cells(2, col + 1).Value = headers(col)
    Next col
    Dim startDay As Long
    startDay = Weekday(DateSerial(yr, mo, 1)) – 1
    Dim lastDay As Long
    lastDay = Day(DateSerial(yr, mo + 1, 0))
    Dim d As Long, r As Long, c As Long
    For d = 1 To lastDay
        r = (startDay + d – 1) \ 7 + 3
        c = (startDay + d – 1) Mod 7 + 1
        ws.Cells(r, c).Value = d
    Next d
End Sub
下のデモで実行結果を確認できます
📅 カレンダー.xlsx – Excel
ABCDEFG
1 2026年3月
2
3 1 2 3 4 5 6 7
4 8 9 10 11 12 13 14
5 15 16 17 18 19 20 21
6 22 23 24 25 26 27 28
7 29 30 31
準備完了 100%
2026年3月のカレンダーが自動生成されました!
☝ 年月を変更すれば任意の月のカレンダーを生成できます

Excelカレンダーで使う主要関数一覧

カレンダー作成で頻出する関数をまとめます。

関数用途使用例
DATE年・月・日から日付を生成=DATE(2026,3,1)
EOMONTH月末日を求める=EOMONTH(A1,0) → A1の月末日
TEXT日付から曜日等を文字表示=TEXT(A1,"aaa") → 「月」
WEEKDAY曜日を数値で返す=WEEKDAY(A1,2) → 月=1〜日=7
YEAR / MONTH / DAY日付から年・月・日を取得=YEAR(A1) → 2026
IF条件分岐月末日以降のセルを空白にする
COUNTIF祝日判定=COUNTIF(祝日,$A2)>0
NETWORKDAYS営業日数カウント稼働日数の自動集計

万年カレンダーの作り方【基本編】

年月を変更するだけで日付・曜日が自動更新される「万年カレンダー」を作成します。

Excel万年カレンダーの完成イメージ(年月入力・日付自動・土日祝色分け)
万年カレンダーの完成イメージ

ステップ1: 年月入力セルを作成する

  • B1セル: 年(例: 2026)
  • D1セル: 月(例: 3)

月初日の計算: F1セルに以下の数式を入力します。

=DATE(B1,D1,1)

月末日の計算: H1セルに以下の数式を入力します。

=EOMONTH(F1,0)

ステップ2: 日付を自動入力する

A3セルに月初日を参照する数式を入力します。

=F1

A4セル以降には、次の数式を入力します。

=IF(A3+1>$H$1,"",A3+1)

この数式の仕組み:

  • A3+1 = 前のセルの翌日
  • $H$1 = 月末日(絶対参照)
  • 月末日を超えたら空白(“”)を表示

下方向に31行分コピーすれば、28〜31日まで自動調整されます。

ステップ3: 曜日を自動表示する

B3セルに次の数式を入力します。

=IF(A3="","",TEXT(A3,"aaa"))

表示形式:

  • "aaa" → 月, 火, 水…(漢字1文字)
  • "aaaa" → 月曜日, 火曜日…(フル表記)
  • "ddd" → Mon, Tue, Wed…(英語略)

ステップ4: 土日祝日を自動色分けする

条件付き書式で設定します。

ルール1(日曜日 = 赤):

=WEEKDAY($A3,2)=7

フォント色: 赤

ルール2(土曜日 = 青):

=WEEKDAY($A3,2)=6

フォント色: 青

ルール3(祝日 = ピンク背景):

=COUNTIF(祝日リスト,$A3)>0

背景色: ピンク

横型月間カレンダーの作り方

横方向に日付が並ぶカレンダーは、シフト表や工程表のベースとして使われます。

ステップ1: 横方向に日付を並べる

A2セルに月初日の数式を入力します。

=DATE($B$1,$D$1,1)

B2セルに翌日の数式を入力し、右方向にコピーします。

=IF(A2+1>EOMONTH($A$2,0),"",A2+1)

表示形式: セルの書式を「d」にすれば日のみ表示(1, 2, 3…)

ステップ2: 曜日行を追加する

A3セルに次の数式を入力し、右方向にコピーします。

=IF(A2="","",TEXT(A2,"aaa"))

ステップ3: 土日の列に色を付ける

条件付き書式を「列ごと」に適用します。

  • 土曜: =WEEKDAY(A$2,2)=6 → 薄い青
  • 日曜: =WEEKDAY(A$2,2)=7 → 薄いピンク

シフト管理表の作り方

シフト表の基本構成

要素配置内容
年月A1:B1入力セル
日付行C2:AG21日〜31日を自動表示
曜日行C3:AG3月〜日を自動表示
スタッフ名A4:A20名前入力
シフト記号C4:AG20◯/△/×/休 等
出勤日数AH列自動集計

シフト記号と集計の設定

シフト記号の例:

記号意味勤務時間
早番8:00〜16:00
遅番14:00〜22:00
夜勤22:00〜6:00
休日
有給休暇

出勤日数の自動集計:

=COUNTIF(C4:AG4,"早")+COUNTIF(C4:AG4,"遅")+COUNTIF(C4:AG4,"夜")

または複数記号をまとめて:

=COUNTA(C4:AG4)-COUNTIF(C4:AG4,"休")-COUNTIF(C4:AG4,"有")-COUNTBLANK(C4:AG4)

入力ミスを防ぐためにドロップダウンを設定します。

  1. シフト記号のセル範囲を選択
  2. 「データ」→「データの入力規則」
  3. 「入力値の種類」: リスト
  4. 「元の値」: 早,遅,夜,休,有
  5. OK

勤怠管理表の作り方

勤怠管理表の基本構成

内容数式例
A列日付=DATE($B$1,$D$1,ROW()-2)
B列曜日=TEXT(A3,"aaa")
C列出勤時刻手入力(9:00等)
D列退勤時刻手入力(18:00等)
E列休憩時間1:00(固定値)
F列実働時間=D3-C3-E3
G列残業時間=MAX(F3-"8:00",0)
H列深夜時間=MAX(D3-"22:00",0)

勤務時間の自動計算

実働時間:

=IF(OR(C3="",D3=""),"",D3-C3-E3)

残業時間(8時間超過分):

=IF(F3="","",MAX(F3-TIME(8,0,0),0))

月合計:

=SUM(F3:F33)

表示形式を [h]:mm にします。

注意: 時刻の合計が24時間を超える場合は、表示形式を [h]:mm にしないと正しく表示されません。

月の集計行を追加する

集計項目数式
出勤日数=COUNTA(C3:C33)
総実働時間=SUM(F3:F33)
総残業時間=SUM(G3:G33)
有給取得日数=COUNTIF(I3:I33,"有給")

EOMONTH関数の使いこなし

カレンダー作成の要となるEOMONTH関数を詳しく解説します。

EOMONTH関数の構文

構文:

=EOMONTH(開始日, 月数)
数式結果説明
=EOMONTH("2026/3/15",0)2026/3/31当月末日
=EOMONTH("2026/3/15",1)2026/4/30翌月末日
=EOMONTH("2026/3/15",-1)2026/2/28先月末日
=EOMONTH("2026/3/15",0)+12026/4/1翌月初日

EOMONTH関数でカレンダーの月末処理を自動化

月末日が28〜31日で変わる問題を自動処理します。

=IF(A3+1>EOMONTH(DATE($B$1,$D$1,1),0),"",A3+1)
  • 2月(28日 or 29日)も自動対応
  • うるう年の判定も不要(EOMONTH関数が自動処理)

翌月カレンダーへの自動切り替え

前月・翌月ボタンを作る方法:

D1セル(月)に対して:

  • 「翌月」ボタン: =IF(D1=12,1,D1+1) でD1を更新
  • 「前月」ボタン: =IF(D1=1,12,D1-1) でD1を更新
  • 年の繰り上げ: =IF(D1=12,B1+1,B1) でB1(年)を更新

よくあるトラブルと対処法

日付が「########」と表示される

  • 原因: 列幅が狭い
  • 対処: 列の境界をダブルクリックで自動調整

31日の月と30日の月で空白行が出る

  • 対処: =IF(A3+1>EOMONTH(...),"",A3+1) で月末以降を空白に
  • 行の表示/非表示: 空白行を選択 → 右クリック → 「非表示」

時刻の合計が24時間以上で正しく表示されない

  • 原因: 表示形式が「h:mm」になっている
  • 対処: セルの書式を [h]:mm に変更([]で囲むと24時間超に対応)

条件付き書式で祝日の色が反映されない

  • 原因: 祝日リストの日付がテキスト形式
  • 対処: 祝日リストの日付セルを選択 → 「データ」→「区切り位置」→「完了」で日付形式に変換

カレンダーをVBAで自動生成する方法

カレンダーの作成をVBAマクロで自動化すれば、年月を指定するだけで自動生成できます。

' 指定月のカレンダーを自動生成するマクロ
Sub カレンダー生成()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim yr As Long, mo As Long
    yr = 2026: mo = 3
    ws.Cells(1, 1).Value = yr & "年" & mo & "月"
    Dim headers As Variant
    headers = Array("日", "月", "火", "水", "木", "金", "土")
    Dim col As Long
    For col = 0 To 6
        ws.Cells(2, col + 1).Value = headers(col)
    Next col
    Dim startDay As Long
    startDay = Weekday(DateSerial(yr, mo, 1)) - 1
    Dim lastDay As Long
    lastDay = Day(DateSerial(yr, mo + 1, 0))
    Dim d As Long, r As Long, c As Long
    For d = 1 To lastDay
        r = (startDay + d - 1) \ 7 + 3
        c = (startDay + d - 1) Mod 7 + 1
        ws.Cells(r, c).Value = d
    Next d
End Sub

VBAマクロの実行結果は記事冒頭のインタラクティブデモで確認できます。ボタンを押すとアニメーションで動作をシミュレーションします。

💻 操作を体験してみよう!

実際の操作手順をクリックして体験できます。各ステップをクリックしてみましょう。

データの入力規則
入力時メッセージの設定画面
(設定タブでドロップダウンを作成しましょう)
エラーメッセージの設定画面
(設定タブでドロップダウンを作成しましょう)
入力値の種類:
元の値:
早,遅,夜,休,有
プレビュー: シフト入力セル
▼ 選択
✓ シフト記号(早/遅/夜/休/有)のドロップダウンが設定されます。入力ミスを防止できます。
OK キャンセル
1 シフト記号を入力するセル範囲を選択
2 「データ」→「データの入力規則」を開く
3 「リスト」を選択 →「元の値」に「早,遅,夜,休,有」を入力
4 OK → セルにドロップダウンが表示されます

まとめ

Excelカレンダーの作成方法をまとめます。

カレンダーの種類主要関数難易度
縦型万年カレンダーDATE, EOMONTH, TEXT★☆☆
横型月間カレンダーDATE, EOMONTH, WEEKDAY★★☆
シフト管理表COUNTIF, データの入力規則★★☆
勤怠管理表TIME, MAX, SUM★★★

まずは万年カレンダーの基本(DATE+EOMONTH+TEXT)をマスターし、そこからシフト表や勤怠表に応用するのがスムーズです。祝日の色分けにはCOUNTIF関数と条件付き書式を組み合わせてください。

Excel業務の自動化
その手作業、自動化しませんか?

VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。

1,600部ツール販売実績
15年製造業の業務経験
無料で相談する →
初回相談無料・お見積りだけでもOK
期間限定でChatGPT✖︎Googleスプレットシートのコンテンツ配布中!

LINEでExcelを気軽に学べる

しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
Profile
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
プロフィールを読む

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

ABOUT ME
しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
記事URLをコピーしました