残業を減らす!Officeテクニック

ExcelのCopilotが提示したボックス型のカレンダーの関数が凄い! 処理を分析してみた

Copilotに頼んだら、気の利いた数式を提示してきた!

 年末も近づき、翌年のカレンダーを準備する時期ですよね。スケジュールはスマートフォンで管理することが多いと思いますが、メモ書き用などには紙のカレンダーが欲しくなります。市販品を買うほどでなければ、Excelで作成しようと考える人もいるはずです。

 昨年は万年カレンダーを作成するテクニックを紹介しましたが、今年は、Copilotに依頼して楽に作成してみたいと思います。

 といっても、実際の作業はプロンプトを入力して、Copilotの回答に従って操作するだけなのですが、提示された数式が良くできていたので、処理の内容を見ていきましょう。

Copilotにボックス型の万年カレンダー作成を依頼すると……

Copilotの回答にLET関数が含まれていた

 ここではボックス型の万年カレンダーを作成したいので、以下のようなプロンプトを入力しました。環境やタイミングによっては、DATE関数やIF関数を組み合わせた回答が出力されるので、その場合はプロンプトに『LET関数を使って』とひと言、添えてみてください。

ボックス型の万年カレンダーを作成してください。月曜始まりにします
プロンプトを入力すると、操作手順とLET関数を含む数式が回答された

 Copilotから回答された数式は以下の通り。後ほどCopilotに詳しく分析してもらうとして、Copilotの回答に従ってカレンダーの枠を作ります。

=LET(
    year, $A$2,
    month, $B$2,
    firstDay, DATE(year, month, 1),
    startDay, firstDay - WEEKDAY(firstDay, 2) + 1 + (ROW(A1) - 1) * 7 + COLUMN(A1) - 1,
    IF(MONTH(startDay) = month, DAY(startDay), "")
)

Copilotの回答に従ってカレンダーの枠を作る。数式は[コピー]のアイコンでコピーできる
セルA1に月を表す数値(ここでは「1」)、セルB2に年を表す数値(ここでは「2025」)を入力した。セルA4~B4に「日」~「土」と入力した

LET関数とは?

 LET関数は、Excel 2024/2021、Microsoft 365のExcelで利用できる関数です。利用したことのある人は少ないと思いますが、数式中に“変数”的な役割を与えて処理できるのが特徴です。構文は以下の通りです。

LET関数の構文。引数は、[名前]と[式]の組み合わせと[計算]で指定する。[名前]と[式]の組み合わせは126組まで指定可能

 LET関数の数式は[名前][式][計算]の3つの引数で成り立ちます。[式]に[名前]を付けて、その[名前]を使って、[計算]に処理したい計算式を指定すると考えてください。なお、[名前]には、A1やB1などのセル番地はNG、先頭に数字も使えません。Excelの関数名との重複は問題ありませんが、[名前]同士の重複はできません。

 これらをふまえて、Copilotが提示した数式を見てみましょう。数式はすでにインデントも設定されているので読みやすいと思います。

Copilotの提示した数式。[名前]として「year」「month」「firstDay」「startDay」が定義されていることがわかる。6行目のIF関数が[式]となる

 「year」「month」「firstDay」「startDay」の4つがLET関数の引数[名前]として定義されています。

・year:年を指定したセルA2
・month:月を指定したセルB2
・firstDay:DATE関数を使って「year」と「month」、「1」で月初日を求めている
・startDay:月初日(firstDay)から、WEEKDAY関数で求めた曜日の数値を引いて、カレンダー内の各行の最初の日付を求めている

 6行目の数式が、LET関数の引数[計算]となります。「当月なら月初日、そうでなければ空白を表示する」というIF関数の数式です。

IF(MONTH(startDay) = month, DAY(startDay), "")

数式をコピーして完成

 「startDay」で各週の始まりの日付を求めているのが気が利いていますね。数式をコピーすることを考慮して、ROW関数とCOLUMN関数でオフセットしているのが難易度高めですが、深く考えなくても数式をコピーすればカレンダーは完成します。

 なお、「45658」のようなシリアル値が表示された場合は、セルの表示形式を設定してください。[Ctrl]+[1]キーで[セルの書式設定]ダイアログボックスを呼び出して、[ユーザー定義]で「d」と指定すれば、日付のみ表示されるようになります。

セルA5の数式をセルG10までコピーした
月を切り替えると日付が切り替わる。非表示の日付も変化する

Copilotに数式を分析してもらうと?

 もちろん、生成された数式をCopilotに分析してもらうことも可能です。追加で質問することで理解も深まります。例えば、セルA1に「年」、セルB1に「月」とした時の数式を出力し直してもらってもいいでしょう。

生成された数式の分析をCopilotに依頼することも可能