【Excel】国の公的な祝日リストを作りたい

Yahoo!知恵袋で、INDIRECT関数のお手本のような質問がありましたので紹介します。

質問

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11272854976

Excel VBA またはOffice 365アプリケーションで世界各国の公的な祝日のデータを取得・表示したい
Excel VBA またはOffice 365アプリケーションで世界各国の公的な祝日のデータを取得・表示したいのですが、何かアイデアありますでしょうか。

下記のように行いたく、どうぞ宜しくお願いします。
1.国のリストを用意
2.実行し、選択した国の祝日を一覧表示する(日付、祝日名のみ)

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11272854976

私の回答

質問を読んだとたん、「INDIRECT関数の紹介みたいな質問だな」と思いました。お手本(Microsoftなどの公式が出しているサンプル)でも、こういう使い方を紹介しているのではなかったでしたっけ?

INDIRECT関数を使えばよいと思います。

使い方
①国のリストを作る
②国のリストにそれぞれ名前を定義する(英国、中国、日本・・・など)
③別のシートで、国を選択してもらうためのドロップダウンリストを作る
④適当なセルにINDIRECT関数を埋め込む

解説

手順を順に説明します。VBAは使いません。

①国のリストを作る

最初に、「国のリスト」というシートを作ります。

そこに各国の公的な祝日を列挙していきます。

A列は、今は考えなくてよいです。B列から値を入れていってください。

日付、祝日名の順です。国ごとに2列ずつ使います。

1行目の国名は、処理の中では使いませんが、分かりやすさのために入れてあります。

②国のリストにそれぞれ名前を定義する

①で作ったシートに名前を定義していきます。

定義する名前は国名とします。

ここで定義した国名は重要です。

この定義名を間違えるとうまく動きません。

A列に、定義した名前をリストアップしておきます。

ここでリストアップする名前が、定義した名前と一致してある必要があります。

③別のシートで、国を選択してもらうためのドロップダウンリストを作る

別のシートを作ります。

図では「公的な祝日」というシート名にしてあります。

セルC1に入力規則でドロップダウンリストを設定しています。

元の値には、「国のリスト」シートのA列を指定しています。

④適当なセルにINDIRECT関数を埋め込む

「公的な祝日」シートの見やすい位置(図では、セルC3)にINDIRECT関数を埋め込みます。

参照セルはC1とします。

第2引数はA1参照かR1C1参照かを選ぶためのものですので、今回は省略してよいです(私は省略しないくせがついているので、FALSE(R1C1参照)にしてしまいましたが)。

試してみた

実際にドロップダウンリストを変更して使ってみたところです。

英国を選んだところ

日本を選んだところ

注意

Excelのスピル機能を利用していますので、リスト表示されるところに別の値が入っているとうまく動きません。

中国(リストが短い)を選んだ状態でセルC13に値を入れ、日本(リストが長い)を選んだところ、スピルエラーとなった

反省

質問者の質問文にはExcelVBAかOffice365アプリケーションとありましたので、ExcelもOffice365の一つだからという理解でこういう回答をしてしまいましたが、本当はVBAで回答すべきでした。

VBAでもできます。

しかし、VBAよりINDIRECT関数の方がより簡単なので、ついこちらで回答してしまいました。