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

Excelで万年カレンダーやシフト表を作りたい、でも毎月手動で日付を変更するのは面倒…そんな悩みを解決します。
Excelの関数(DATE・EOMONTH・TEXT・WEEKDAY等)を活用すれば、年月を変更するだけで日付・曜日・祝日が自動更新されるカレンダーを作成できます。
本記事では、基本の月間カレンダーから、シフト管理表、勤怠管理表まで、3種類のカレンダーの作り方を手順付きで解説します。
- 年月を変えるだけで自動更新される万年カレンダーの作り方
- 土日祝日を自動で色分けする方法
- シフト管理表の作り方(記号入力・集計付き)
- 勤怠管理表の作り方(出退勤時刻・残業計算)
- 月末日を自動計算するEOMONTH関数の使い方
- Microsoft公式テンプレートの活用方法
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
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 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 | ||||
☝ 年月を変更すれば任意の月のカレンダーを生成できます
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 | 営業日数カウント | 稼働日数の自動集計 |
万年カレンダーの作り方【基本編】
年月を変更するだけで日付・曜日が自動更新される「万年カレンダー」を作成します。
ステップ1: 年月入力セルを作成する
- B1セル: 年(例: 2026)
- D1セル: 月(例: 3)
月初日の計算: F1セルに以下の数式を入力します。
=DATE(B1,D1,1)月末日の計算: H1セルに以下の数式を入力します。
=EOMONTH(F1,0)ステップ2: 日付を自動入力する
A3セルに月初日を参照する数式を入力します。
=F1A4セル以降には、次の数式を入力します。
=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:AG2 | 1日〜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)シフト表にドロップダウンリストを設定する
入力ミスを防ぐためにドロップダウンを設定します。
- シフト記号のセル範囲を選択
- 「データ」→「データの入力規則」
- 「入力値の種類」: リスト
- 「元の値」: 早,遅,夜,休,有
- 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)+1 | 2026/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マクロの実行結果は記事冒頭のインタラクティブデモで確認できます。ボタンを押すとアニメーションで動作をシミュレーションします。
実際の操作手順をクリックして体験できます。各ステップをクリックしてみましょう。
(設定タブでドロップダウンを作成しましょう)
(設定タブでドロップダウンを作成しましょう)
まとめ
Excelカレンダーの作成方法をまとめます。
| カレンダーの種類 | 主要関数 | 難易度 |
|---|---|---|
| 縦型万年カレンダー | DATE, EOMONTH, TEXT | ★☆☆ |
| 横型月間カレンダー | DATE, EOMONTH, WEEKDAY | ★★☆ |
| シフト管理表 | COUNTIF, データの入力規則 | ★★☆ |
| 勤怠管理表 | TIME, MAX, SUM | ★★★ |
まずは万年カレンダーの基本(DATE+EOMONTH+TEXT)をマスターし、そこからシフト表や勤怠表に応用するのがスムーズです。祝日の色分けにはCOUNTIF関数と条件付き書式を組み合わせてください。
VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。
LINEでExcelを気軽に学べる
