メインコンテンツへスキップ
見出し画像

[EXCEL] リスト入力⑥ 2段階リストをINDIRECT関数で作る(正攻法)~入力表作成レッスン~

    関連記事一覧
    ▶目次>様式/入力表の作成>プルダウンリスト
    ▶関連記事:プルダウンリスト

    【まとめ】
    ・プルダウンリストで多数のデータから選ぶのは大変
    (例:全国の市町村リスト一覧から該当市町村を選ぶ)
    ・2段階リストを作って絞り込めると楽
    (例:都道府県を選ぶ ⇒ 都道府県内の市町村から選ぶ)
    ・2段階リストを作るには「タテヨコ表」が必要
    (例:ヨコに都道府県名×タテに市町村名のリスト)
    ・リストに「名前」を付けてINDIRECT関数で呼び出す
    *リストを開いた際に常に一番上から選べるようにする方法あり(別記事)

    *私の不得意分野なので他サイトの参照をお勧めします
    Googleで「エクセル プルダウンリスト」を検索
    note内で「エクセル 2段階リスト」を検索

    【説明】

    前記事では都道府県を選びやすくする方法(力技)をお示ししましたが、都道府県ならともかく、全国の市町村の中から該当の市町村を選ぶのは大変です。
    そこはやはり2段階リストの出番。
    2段階リストとはこんな感じのもの。

    画像


    2段階リストを作るためには、前準備として、
    横に都道府県が並び、
    縦に都道府県ごとの市町村が並ぶリスト
    を準備しておく必要があります。


    元データは以下で紹介した総務省のデータ
    [EXCEL] 総務省の「全国地方公共団体コード」を見て唖然! トンデモ表だった?(と思うのは私だけ?)
    こんな感じのもの。

    画像

    これを元に都道府県別の市町村リストを作ります。
    完成形はこれ。

    画像
    特別区は外しています

    こんな表、作るの面倒ですよね?(作ったけど)

    普通にやれば、こんな手順
    1 一番上に「北海道」と入れる
    2 「北海道」の市町村を範囲指定してコピー
    3 「北海道」の下に貼り付け

    これを47回やればいいだけです。1時間もかからないかな?
    でも、47回もやってらんない。
    市町村の範囲指定を間違える恐れもあります(その方が怖い)。

    なので、上の一覧は別の方法で作りました。
    そしたら、5分かかりませんでした。
    なんだ、楽ちんじゃん!

    その方法はともかく、これで2段階プルダウンリストを作る準備が出来ました。
    と思ったけど、まだ、です。

    まずは、「都道府県×市町村」一覧に名前を付けます。

    1 一覧の選択

    A1セルを選択 ⇒ Ctrl + A で一覧全体が範囲指定される
    (北海道が一番下まで伸びる)。

    画像
    さすが北海道
    市町村数がダントツ多い!

    2 Alt ⇒ M(数式) ⇒ C(選択範囲から作成)

    画像
    Alt ⇒ M で上が出る
    C で右下の「選択範囲から作成」が選択される

    下のダイアログ(小ウィンドウ)が出たら・・・

    画像

    左端列の☑は外しておく。
    つまり、上端行の都道府県名のみを名前として作成する。
    「OK」を押すと・・・何も変わらない・・・。
    「名前が付きました」とか、メッセージ位、出してくれてもいいのに。

    でも、Alt ⇒ M(数式) ⇒M(名前の管理)と押すと・・・

    画像

    都道府県別に名前が付いている(らしい)ことが分かる。

    3 2段階リストの「都道府県」欄を設定

    Alt ⇒ A ⇒ V ⇒ Vで「データの入力規則」を開いたら、「リスト」を選択

    画像

    続いて、「元の値」の欄は、北海道から沖縄までの部分を選択

    画像

    これで、「都道府県」をクリックすると(又は Alt+↓ )で都道府県名が表示される。

    画像

    4 「市町村」の欄の設定

    同じく Alt ⇒ A ⇒ V ⇒ V で「データの入力規則」を開き、
    「リスト」を選ぶ。
    「元の値」には
    =indirect(b3 と入れる(小文字でいい。最後のカッコもなくてもいい。勝手に付く)

    画像

    b3セルは、都道府県名が入る欄。
    INDERCTとは、マイクロソフトのサイトだと

    説明
    指定される文字列への参照を返します。 セル参照はすぐに計算され、結果としてセルの内容が表示されます。 INDIRECT 関数を使うと、数式自体を変更しないで、数式内で使用しているセル参照を変更することができます。

    書式
    INDIRECT(参照文字列, [参照形式])

    とのこと。なんだかよく分かりませんが、要は、
    INDERCTのカッコの中の名前のリストを表する、ってことです。

    ちなみに、この状態で「OK」を押すと、下のようなエラー表示が出ます。

    画像

    なぜなら、「都道府県」の欄が空欄だから。

    5 2段階リストの完成

    でも、「都道府県」の欄で「北海道」を選ぶと・・・

    画像

    「市町村」には、北海道内の市町村名一覧が出ます。

    6 市町村欄をクリックしても空欄しか出ない?

    しかし・・・
    青森県を選んで、市町村欄をクリックすると・・・

    画像

    何も出ません。
    と思ったら、上にスクロールしたら出てきました。

    画像

    どうやら、北海道の市町村数が多いので、それに引っ張られて下の方が出てしまうようです。
    つまり、市町村数が少ない都道府県も、北海道と同じ範囲を選択しているから、といったらいいでしょうか?

    *2025/11/19追記
    一番下の空欄が選択されてしまうのは、北海道に引っ張られるからではありませんでした。市町村名を選ぼうとしているセルが空欄なので、初期値として青森県の列にある空欄を選んでしまうためでした。
    これを防ぐためには、下の方法以外でも、意外と簡単に、リストを開いたら常に一番上から選べる方法、ありました。別記事にします。


    7 空欄を表示させないためには?(Copilotに聞いてみた)

    これを常に一番上(都道府県名のすぐ下に市町村)にするにはどうすればいか?
    これ、結句面倒そう。
    Copilotに聞いたら、以下の答え。

    (質問)
    横に都道府県名、各都道府県名の下に市町村名が並びまます。全部を一括範囲指定して、範囲選択で名前を作成し、上端行を名前にしました

    (Copilot)
    なるほど、構造がよく分かりました 👍
    横に都道府県名が並び、その下に市町村名が縦に並ぶ」形で、範囲選択から「上端行を名前にする」で名前定義を作ったのですね。

    この方法だと、各都道府県の名前範囲に「空白セル」まで含まれてしまうため、プルダウンに空欄が出てしまいます。そこで 動的な名前定義 に切り替えるのが解決策です。

    ✅ 解決方法(横並び+縦リスト構造の場合)

    1. 各都道府県の名前定義を修正

    例えば「茨城」という名前範囲を作った場合、今は

    コード
    =Sheet1!$B$2:$B$50

    のように固定範囲になっているはずです。 これを COUNTA関数+OFFSET関数 に変えます。

    例:

    コード
    =OFFSET(Sheet1!$B$2,0,0,COUNTA(Sheet1!$B$2:$B$100),1)

    • $B$2 が市町村リストの開始セル

    • COUNTAで「入力されている数」だけ範囲を広げる

    • 空白セルは除外されるので、プルダウンに空欄が出なくなります

    2. INDIRECT関数で呼び出す

    2段階目のデータ検証はそのまま

    コード
    =INDIRECT($A$2)

    のように「選択した都道府県名」を参照します。 このとき、各都道府県の名前定義が動的になっているので、空欄は表示されません。

    3. ポイント

    • 見出し行(都道府県名)を含めないようにする

    • 各列の「市町村リスト部分」だけを動的範囲にする

    • データが増えても自動調整されるので管理が楽になります

    💡 もし「都道府県ごとに市町村の数がバラバラで、途中に空欄がある」場合でも、この方法なら空欄を除外できます。


    とのこと。
    しかし、各都道府県別にリスト化されている。

    画像

    これを、どうやって以下みたいにしたらいいかが分からない。
    =OFFSET(Sheet1!$B$2,0,0,COUNTA(Sheet1!$B$2:$B$100),1)

    今回は、全都道府県を一気に名前を付けてリスト化したが、個々にやばいいのか?
    それも面倒。


    *2025/11/19
    途中でも書きましたが、リストを開いたら常に一番上から選べるようにする方法、ありました。意外と簡単かも。別記事にします。

    *記事書きました。
    [EXCEL] リスト入力⑨ 都道府県⇒市町村の順で選択する2段階プルダウンリストで常に一番上を表示させる~入力表作成レッスン~

    あなたへのおすすめ