Excelで「万年カレンダー」、年月指定で日を自動表示
実例で学ぶ! Excel関数・数式講座「万年カレンダー」(1)
ビジネススキル図1 今回作成するカレンダーの完成例。F2セルの「年」は直接入力するが、G2セルの「月」は「1」〜「12」の選択肢から選ぶ。その下の各曜日の列に、指定した年・月の「日」が自動表示される。また、画面の左上側に、選んだ月の英語名が大きく表示される
今回は、指定した年と月の「カレンダー」を表示するシートの作成を通して、Excelで日付を処理するテクニックを紹介する(図1)。数式だけではなく、「表示形式」や「条件付き書式」などの機能を組み合わせて、対象の月の英語名を表示したり、登録した休日の文字色を自動的に変化させたりといった仕組みを設定していく。
(1)今回
(2)Excelの「カレンダー」上級テク、始まる曜日を選択
同連載はほかに「成績表」「時刻・時間計算」「顧客情報表」「商品注文の受付コード」「販売記録」があります。
月の数字をリストから選択、選んだ月名を英語で表示
まず、年と月を指定すると、その月の英語名が表示されるようにしよう(図2)。これには、日付を求める数式と、「表示形式」の設定を利用する。
図2 まず、年・月を指定すると、その月の英語名が自動的に表示される仕組みを作成する。英語名を表示するのは、A1〜 C2の結合セル。数式でその年・月の日付を求め、このセルに「表示形式」など複数の書式を設定することで実現している
年の数字は直接入力するが、月を表す数字はドロップダウンリストから選択できるようにする。対象のG2セルを選択して、「データの入力規則」画面を表示(図3)。「入力値の種類」で「リスト」を選び、「元の値」欄に「1」〜「12」の数値を「,」(半角カンマ)で区切って入力する(図4)。これで、セルの右側に表示される「▼」から、月の数字を選べるようになる(図5)。
図3 基本的なデータを入力し、フォントや背景色などの書式を設定したワークシートから作業を開始する。最初に、「月」の数字を「1」〜「12」の選択肢から選べるようにしよう。G2セルを選択し、「データ」タブの「データの入力規則」をクリックする(1〜3)
図4 「データの入力規則」画面の「設定」タブが表示される。その「入力値の種類」で「リスト」を選択し、「元の値」欄 に「1」〜「12」を「,」(半角カンマ)で区切って入力(1、2)。「O K」をクリックする(3)
図5 改めてG2セルを選択し、右側に表示される「▼」をクリックする(1、2)。ドロップダウンリストで「1」〜「12」の選択肢が表示されるので、ここでは「4」をクリック(3)。すると、選んだ「4」がG2セルに入力される
月の英語名は大きめに表示したいので、あらかじめA1〜C2セルを結合する(図6)。この結合セルに、F2セルの数値を「年」、G2セルの数値を「月」とし、「日」を「1」とする日付を求めるDATE(デイト)関数の数式を入力する(図7)。この日付自体も、後でカレンダーの日付を表示するための基本データとして利用する。
図6 次に、指定した月の英語名を表示するA1〜 C2セルを結合しよう。このセル範囲を選択し、「ホーム」タブの「セルを結合して中央揃え」の「∨」をクリックして、「セルの結合」を選ぶ(1〜3)
図7 A1〜 C2の結合セルに、指定した年・月の1日の日付を求める数式を入力する。DATE関数の引数「年」にF2セル、引数「月」にG2セルの参照を指定し、引数「日」に直接「1」を指定すればよい
日付が表示されたA1〜C2の結合セルを選択している状態で、「セルの書式設定」画面の「表示形式」タブを開く(図8)。「分類」で「ユーザー定義」を選び、「種類」欄に「mmmm」と指定して、設定を完了する(図9)。このセルの実際の値(数式の結果)は日付のままだが、画面上の表示はその月の英語名に変わっている。
図8 日付データを、その月の英語名で表示するには、「表示形式」を設定する。A1〜 C2の結合セルを選択し、「ホーム」タブの「数値」グループのダイアログボックス起動ツールをクリックする(1、2)
図9 「セルの書式設定」画面の「表示形式」タブが表示される。その「分類」で「ユーザー定義 」を選択し、「種類」欄に「mmmm」と入力して、「OK」をクリックする(1〜3)。これで、A1〜 C2の結合セルに、求めた日付の月の英語名が表示される
さらに、この月名をより強調するため、結合セルに、フォントやフォントサイズ、フォントの色、および文字の配置といった書式を設定する(図10)。
図10 A1〜 C2の結合セルの「フォント」を「Cooper Black」に、「フォントサイズ」を「24」に、「フォントの色」を「緑、アクセント6、白+基本色40%」に変更(1〜3)。さらに、文字の配置の縦位置を「下揃え」に、横位置を「左揃え」に変更する(4、5)
指定年月の日付を数式で算出、表示形式で「日」のみを表示
次に、数式と書式設定などを利用して、指定した年・月の1カ月分の「日」を表す数値をセル範囲に表示し、カレンダーを完成させよう(図11)。
図11 指定された年・月で、A4〜 G4セルに入力した「日」〜「土」の各曜日に対応する日の数字を、A5〜 G10セルに自動的に表示させる。さらに、登録した休日や前月・次月の日付のセルの書 式を自動的に変える仕組みを設定し、万年カレンダーを完成させよう
対象範囲の左上端のA5セルには、A1セル(結合セル)の数式で求めた当月1日の日付を参照し、それ以前の最初の日曜日を求める数式を入力する(図12)。具体的には、WEEKDAY(ウィークデイ)関数を使用して、当月1日の曜日を表す数値を、日〜土を1〜7として取得。当月1日に1を足した2日の日付からその数値を引くことで、目的の日付が求められる。なお、A1セルを参照した影響で、これらのセルの表示も月の英語名になる。今回は、表示の修正は後回しにして、B5〜G5セルに、左のセルの日付の1日後を求める数式を入力する(図13)。1つのセルに入力してコピーするのは、書式を除いてコピーする手間がかかるため、「Ctrl」+「Enter」キーで一括入力した。同様に、A6〜G10セルには、上のセルの日付の7日後の日付を求める数式を一括入力する(図14)。
図12 A5セルでは、A1セルで求めた1日の曜日を、WEEKDAY関数で「日」〜「土」を1〜7の数値として取得。A1セルの値に1を加えた2日の日付からこれを引いて、1日以前の最初の日曜日を求める。A1セルの表示形式が引き継がれ「March」と表示されるが、これは図15で修正する
図13 B5〜G5セルを選択し、A5セルの値に1を加えて翌日の日付を求める数式を入力して、「Ctrl」+「Enter」キーを押す(1〜3)。選択範囲の各セルに一括で同じ数式が入力される。「A5」の列番号はセルごとに変化し、いずれも1つ左のセルを参照する
図14 A6〜G10セルを選択し、A5セルの値に7を加えて翌週の日付を求める数式を入力して、「Ctrl」+「Enter」キーを押す(1〜3)。選択範囲の各セルに一括で同じ数式が入力される。「A5」はセルごとに変化し、いずれも同じ列の1つ上のセルを参照する
前述通り、このA5〜G10セルには、いずれも月の英語名が表示される。「表示形式」の「ユーザー定義」で、「種類」欄に「d」と指定することで、日を表す数字だけの表示に修正できる(図15)。
図15 A5〜 G10セルの数式の結果は日付だが、現在は月の英語名が表示されている。この範囲を選択して、図 8と同様に「セルの書式設定」画面の「表示形式」タブを開き、「ユーザー定義」で「種類」欄に「d」と指定して「OK」をクリック(1〜3)。これで、日を表す数字に変わる
休日の日付を別表に入力、数式で判定して文字色を変更
カレンダーの範囲では、土曜日と日曜日の列のフォントの色は、最初から青と赤に変更している。これらに加えて、休日のセルの文字色も赤にしよう。
対象とする休日は、あらかじめ別シートに入力しておく。この例では国民の祝日と振替休日だけだが、独自の休日を追加してもよい。その日付の範囲を選択し、名前ボックスを利用して「休日」という名前を設定する(図16)。
図16 別シートに休日一覧の表を作成した。ここに入力した休日を、日曜日と同じ赤い文字で表示させよう。日付を入力した範囲を選択し、名前ボックスをクリックして「休日」と入力し、「Enter」キーを押す(1、2)。これで、選択範囲に「休日」という名前が付く
カレンダーのシートに戻り、日を表示するA5〜G10セルを対象に、「条件付き書式」の「新しいルール」を実行(図17)。ルールの種類として「数式を使用して…」を選び、「休日」と名前を付けた範囲にA5セルの日付があるかどうかを調べるCOUNTIF(カウントイフ)関数の数式を入力する(図18)。この式の「A5」は選択範囲の中のアクティブセルであり、「$」を付けない相対参照にすることで、対象範囲の各セルに対する指定となる。そして、書式として、フォントの色の「赤」を指定する(図19)。これで、登録した休日が、カレンダー上では赤い文字で表示される。
図17 作成中のカレンダーのシートに戻り、A5〜 G10セルを選択して、「ホーム」タブの「条件付き書式」から「新しいルール」を選ぶ(1〜3)
図18 「新しい書式ルール」画面で、ルールの種類として「数式を使用して、書式設定するセルを決定」を選ぶ(1)。COUNTIF関数を利用し、対象の各セルの日付が「休日」という名前の範囲内にあるか判定する数式を入力(2)。「 書式」をクリックする(3)
図19 「セルの書式設定」画面の「フォント」タブが表示される 。「色」で「赤」を選び、「OK」をクリックする(1、2)。戻った「新しい書式ルール」画面も「OK」をクリックして閉じる。これで、「休日一覧」に登録した休日が赤い文字に変わる
同じ範囲を対象に「条件付き書式」の「新しいルール」を再度実行し、「数式を使用して…」を選択する。MONTH(マンス)関数を使用して、各セルの日付の「月」がG2セルの数字と異なるかどうかを判定する数式を指定(図20)。書式としてグレーの文字色を指定することで、前月や翌月の日の数字が薄く表示されるようになる。
図20 同じ範囲を対象に、「新しい書式ルール」画面で「数式を使用して⋯」を選ぶ(1)。MONTH関数を利用し、各セルの日付の「月」がG2セルと異なるか判定する数式を入力(2)。変化させる文字色として「白、背景1 、黒+基本色25%」を設定し、「OK」をクリックする(3、4)
なお、Excel 2021またはMicrosoft 365版のExcelであれば、各セルに数式を入力する必要もない。SEQUENCE(シークエンス)関数を使って、基準の日付から1ずつ増えていく値を、指定した行数×列数の配列として返す数式をA5セルに入力。すると、G10セルまでの範囲にスピルされ、それぞれの日を表す数字が表示される(図21)。
図21 最新版Excelでは、SEQUENCE関数を利用して、1つのセルの数式だけですべての日を表示することが可能だ。A5〜 G10セルの数式を一度クリアし、改めてA5セルにその数式を入力。スピルによって、日付の連続データがA5〜 G10セルに表示される
(ライター 土屋和人)
[日経PC21 2023年3月号掲載記事を再構成]