
Excelで作るカレンダーとスケジュール管理法
Officeのお役立ち情報

この記事の最終更新日:2025年7月7日

先輩、チームのプロジェクト管理に、Excelでカレンダーを作っているんですけど、毎月、手作業で日付と曜日を打ち直すのが、地味にすごく手間で…。
それに、祝日に色を付けたり、担当者ごとのタスクを書き込んだりしていると、どんどん見た目がごちゃごちゃになって、逆に見づらくなっちゃうんです。
正直、Googleカレンダーとか、専門のツールを使った方がいいのかなって思うんですけど、でも、報告書とか他の資料はExcelで作っているので、できれば使い慣れたExcelで、もっとこう、賢くて見やすいカレンダーが作れたら最高なんですけど…。

その悩み、Excelの真の力に気づくための、素晴らしい一歩だよ。多くの人はExcelを、マス目が並んだ便利な「表計算ソフト」だと思っている。でも、その本質は、関数とVBAという強力な言語で、あらゆる業務を自動化・システム化できる、一種の『プログラミング環境』なんだ。
Googleカレンダーが『高機能な既製品の手帳』なら、Excelは『最高級の素材と、どんな加工もできる精密な道具が揃った、オーダーメイド手帳の工房』のようなものさ。
今日は、その工房で、日付関数、条件付き書式、そしてVBAマクロという専門の道具を駆使して、年月を変えるだけで自動更新される『万年カレンダー』から、プロジェクトの進捗を可視化する『ガントチャート』まで、世界に一つだけの、君だけの最強のスケジュール管理システムを、ゼロから設計する方法を、日本一詳しく伝授しよう。
【思想編】なぜ今、あえてExcelでカレンダーを作るのか?
現代には、GoogleカレンダーやOutlookカレンダーをはじめ、高機能で便利なスケジュール管理ツールが無数に存在します。
それにもかかわらず、なぜ私たちは、今あえて「Excel」でカレンダーを作るという、一見、非効率にも思える選択をするのでしょうか。
その答えは、専用ツールには決して真似のできない、Excelが持つ二つの本質的な価値にあります。
それは、「究極の自由度」と「業務データとの圧倒的な連携力」です。
専用ツールにはない「究極の自由度」と「データ連携力」
専用ツールは、開発者があらかじめ想定した「正しい使い方」の範囲内で、非常に高い利便性を発揮します。
しかし、あなたの業務が少しでもその「想定」から外れた途端、途端に不便になったり、対応できなかったりすることがあります。
一方、Excelは白紙のキャンバスです。
印刷を前提とした複雑なレイアウト、あなたの会社の独自のルールに基づいた色分け、特定のセルの値に応じた計算など、どんなにニッチで特殊な要求でも、関数とVBAを組み合わせれば、ほぼ100%実現可能です。
さらに、Excelの最大の強みは、カレンダーを他の業務データとシームレスに連携させられる点にあります。
売上管理表、顧客リスト、在庫データ、タスクリストといった、あなたが普段Excelで管理しているあらゆるデータと、カレンダーを直接結びつけ、例えば「特定商品の納期をカレンダーに自動表示する」「担当者ごとのタスクの負荷状況を色で可視化する」といった、業務に直結した、生きたスケジュール管理ツールを構築できるのです。
Excelカレンダーの限界と、それを乗り越えるための心構え
もちろん、Excelにも限界はあります。
複数人でのリアルタイム同時編集や、スマートフォンへのプッシュ通知といった機能は、クラウドベースの専用ツールに軍配が上がります。
また、Excelでカレンダーを作る上で最も陥りやすい罠が、「Excel方眼紙Excelのセルを正方形に近づけ、方眼紙のように使って、文書のレイアウトを作成する手法。見た目は綺麗だが、データの再利用性や計算機能を著しく損なうため、一般的に悪手とされています。」の呪縛です。
セルを細かく結合し、見た目だけを整えることに注力してしまうと、後から関数で集計したり、データを分析したりすることが、極めて困難になります。
重要なのは、カレンダーを「見た目」として作るのではなく、「構造化されたデータベース」として設計するという意識を持つことです。
この心構えさえあれば、Excelは最強のカスタムカレンダーツールへと変貌します。
【第一部:関数編】自動更新される「万年カレンダー」をゼロから構築する
まずは、VBAを使わず、関数とExcelの標準機能だけで、年月を入力すれば自動で日付と曜日が更新される「万年カレンダー」の作り方を、ステップバイステップで徹底解説します。
ステップ1:土台を作る - 日付と曜日の完全自動表示
最初に、カレンダーの年月を指定するためのセルを2つ用意します(例: A1に年、B1に月)。
次に、カレンダーの日付を表示するエリアの左上のセル(例えばA3)に、その月の「1日」が何曜日かを計算し、カレンダーの開始日を決定する数式を入力します。
カレンダーは通常、日曜始まりか、月曜始まりです。
ここでは日曜始まりを例に取ります。
まず、指定した年月の1日の日付を `DATE(A1, B1, 1)` という関数で取得します。
次に、その日が週の何日目かを `WEEKDAY(DATE(A1, B1, 1))` で取得します(日曜日=1、月曜日=2...)。
この二つを組み合わせ、`=DATE(A1, B1, 1) - WEEKDAY(DATE(A1, B1, 1)) + 1` という数式をA3セルに入力すると、カレンダーの左上に表示すべき「最初の日曜日」の日付が自動で計算されます。
あとは、A3の右隣のセルに `=A3+1` と入力して右にコピーし、A3の真下のセルに `=A3+7` と入力して下にコピーすれば、カレンダーの骨格は完成です。
曜日を表示するには、日付セルのすぐ上の行に `=A3` と入力し、セルの表示形式を「ユーザー定義」で `aaa` とすれば、「日」「月」...と表示されます。
ステップ2:祝日リストとの連携と「条件付き書式」による色付け
次に、カレンダーに命を吹き込む、色付けの作業です。
まず、内閣府のサイトなどから「国民の祝日」のデータを取得し、Excelの別シートに「祝日マスタ」として日付と祝日名のリストを作成しておきます。
そして、カレンダーの日付範囲を選択し、「ホーム」タブの「条件付き書式」→「新しいルール」→「数式を使用して、書式設定するセルを決定」を選びます。
ここで、以下の数式を順番に設定していきます。(A3は選択範囲の左上のセルを指します)
-
日曜日の書式設定:
数式: `=WEEKDAY(A3)=1` → 背景色を赤に設定
-
土曜日の書式設定:
数式: `=WEEKDAY(A3)=7` → 背景色を青に設定
-
祝日の書式設定:
数式: `=COUNTIF(祝日マスタ!$A:$A, A3)=1` → 背景色を赤に設定(日曜と同じで可)
このCOUNTIF関数指定した範囲内で、検索条件に一致するセルの個数を数える関数。ここでは、日付が祝日マスタに存在するか(=1個あるか)を判定しています。を使った式により、日付が祝日マスタにあれば、自動で色が付きます。
ステップ3:当月以外の日付をグレーアウトする
カレンダーには、前月や翌月の日付も表示されていますが、これらは視覚的に区別したいところです。
これも「条件付き書式」で実現できます。
先ほどと同じように、カレンダーの日付範囲を選択し、新しいルールとして、以下の数式を設定します。
数式: `=MONTH(A3)<>$B$1` ($B$1は「月」を入力したセル)
この数式は、「セルの月が、指定した月と異なる場合」にTRUEとなります。
この条件がTRUEの場合に、フォントの色を「灰色」に設定すれば、当月以外の日付だけが、自動で目立たないように表示されます。
ここまでで、関数だけで動作する、非常に実用的な万年カレンダーが完成しました。
【第二部:応用編】Excelを動的なスケジュール管理ツールへ進化させる
カレンダーが完成したら、次はいよいよ、これをスケジュール管理ツールへと進化させていきましょう。
タスクリストとの連携 - 締め切りをカレンダーに自動反映
別シートに、「タスク管理表」として、「タスク名」「担当者」「開始日」「終了日」「進捗率」といった項目を持つテーブルを作成します。
そして、カレンダーの各日付の下に、複数行のスケジュール表示欄を設けます。
ここに、タスク管理表から「その日に該当するタスク」を自動で表示させます。
Microsoft 365版のExcelであれば、FILTER関数指定した配列や範囲の中から、定義した条件に基づいて、レコードを抽出(フィルタリング)する、非常に強力な動的配列関数。が非常に便利です。
例えば、カレンダーの日付セルがA3の場合、その下のスケジュール表示セルに `=TEXTJOIN(CHAR(10), TRUE, FILTER(タスク管理表[タスク名], (タスク管理表[開始日]<=A3)*(タスク管理表[終了日]>=A3)))` といった数式を入力します。
この数式は、A3の日付が、タスクの開始日から終了日の間に含まれるタスク名を全て抽出し、`TEXTJOIN`関数で改行(`CHAR(10)`)を挟んで、一つのセルにまとめて表示してくれます。
プロジェクト管理の王道「ガントチャート」の作成
Excelの真骨頂は、このタスクリストとカレンダーを組み合わせた、視覚的な「ガントチャート」の作成にあります。
横軸に日付、縦軸にタスクを並べた表を作成します。
そして、日付とタスクが交差するセル範囲を選択し、「条件付き書式」で、以下の数式をルールとして設定します。
数式: `=AND(G$1>=$C2, G$1<=$D2)`
ここで、`G$1`はガントチャートの日付行の先頭セル、`$C2`はタスクリストの開始日列の先頭セル、`$D2`は終了日列の先頭セルを指します。
この数式は、「日付が、タスクの開始日と終了日の間に含まれている場合」にTRUEとなります。
この条件がTRUEの場合の書式として、セルの背景色を任意の色に設定します。
これを設定するだけで、タスクの期間に該当するセルが、横棒グラフのように自動で色付けされ、プロジェクト全体のスケジュールと依存関係を、一目で把握できる強力なガントチャートが完成します。
【第三部:VBAマクロ編】Excelを対話的なアプリケーションに変える
関数と標準機能だけでも高度なことは可能ですが、日常的な定型作業の自動化や、より対話的なユーザーインターフェースの実装には、VBA (Visual Basic for Applications)Microsoft Office製品に搭載されているプログラミング言語。定型的な操作を自動化したり、複雑な処理を実装したりするために使用します。の知識が不可欠です。
実践VBAマクロレシピ集
ここでは、すぐに使える実用的なVBAマクロのコード例をいくつか紹介します。
これらのコードは、VBE(Visual Basic Editor)を開き、標準モジュールに記述して使います。
-
レシピ1:ボタン一つで翌月・前月へ移動するマクロ
シート上にボタンを配置し、以下のマクロを登録します。これにより、年月のセルを手入力することなく、カレンダーをめくるように操作できます。
Sub GoToNextMonth()
Range("B1").Value = Range("B1").Value + 1
If Range("B1").Value > 12 Then
Range("B1").Value = 1
Range("A1").Value = Range("A1").Value + 1
End If
End Sub -
レシピ2:日付セルをダブルクリックすると詳細入力フォームが表示される
該当シートのWorksheet_BeforeDoubleClickイベントに記述します。日付セルをダブルクリックすると、その日の詳細なスケジュールを入力するための、ユーザーフォーム(別途作成が必要)をモーダルで表示させることができます。これにより、Excelがまるで専用アプリケーションのように動作します。
-
レシピ3:祝日リストをWebから自動更新する
VBAのWebスクレイピング機能を使い、内閣府のサイトなどから、最新の祝日データを自動で取得し、「祝日マスタ」シートを更新するマクロです。これにより、法改正による祝日の変更にも、自動で対応できます。
まとめ - Excelカレンダーは、あなた自身の「思考」と「業務」を映し出す鏡である
Excelによるカレンダー作成とスケジュール管理は、単なる「表作り」ではありません。
それは、関数やVBAという論理的な言語を駆使して、あなた自身の業務プロセスそのものを、一つのシステムとして再構築していく、知的で創造的な作業なのです。
-
1. まずは「関数」で土台を築け:
日付関数を組み合わせ、条件付き書式を駆使することで、VBAを使わなくても、メンテナンスフリーの「万年カレンダー」を構築できます。これが全ての基礎となります。
-
2. 「データ連携」で価値を高めよ:
カレンダーを単体で終わらせず、タスクリストや各種業務データと連携させること。FILTER関数などを使い、必要な情報をカレンダー上に自動で集約させることで、Excelは強力な「業務ダッシュボード」へと進化します。
-
3. 「VBAマクロ」で魂を吹き込め:
日常の繰り返し作業や、複雑な操作をVBAで自動化すること。これにより、あなたのExcelカレンダーは、静的な表から、あなたと対話し、あなたを助ける、動的な「アプリケーション」へと昇華します。
専用ツールが提供する「誰にとっても便利な機能」ではなく、あなた自身の業務に「完全にフィットした、あなただけの機能」。
この究極のカスタマイズ性と、ゼロから論理を組み立ててシステムを構築していく面白さこそが、今なお多くのプロフェッショナルがExcelを愛用し続ける、最大の理由なのです。
ぜひ、この記事を参考に、あなただけの最強のスケジュール管理システムの構築に、挑戦してみてください。
パソコン購入のためのお役立ち情報
パソコン選びがよく分からない方、ご不安のある方、悩む前に!お気軽にご相談ください!
専門スタッフが、性能・ご予算・お好みなどご希望に合ったパソコンをお探しします!
