[EXCEL] リスト入力⑩ 2段階プルダウンリストのトラップ! 千葉県千代田区? ~入力表作成レッスン~
▶目次>様式/入力表の作成>プルダウンリスト
▶関連記事:プルダウンリスト
先日、2段階プルダウンリストの作り方の記事を書きました。
都道府県 ⇒ 市町村名の順で選んでいく、というものです。
こういった都道府県名×市町村名のタテヨコ表を作り、

各列に都道府県名の名前つけ(一括設定)、
都道府県名をリストから選んだら、

該当の市町村名だけが表示される、というものです。

これ、便利です。
特に、都道府県と市町村のように、親項目(都道府県)と子項目(市町村)の関係が変わる可能性が低いものの場合は有効です(逆に職員とその所属先みたいに、しょっちゅう変わるものには不向きかと思います。対処方法はああるようですが)。
しかし、便利なこの2段階リスト、大きなトラップがあることに気付きました。
当たり前といえばあたりまえなのですが、念のため、認識しておいた方がいいかと思いますので、記事にしておきます。
2段階リストのトラップ!
その1 都道府県と市町村の組み合わせのエラーチェックができない
上と同じように「東京都」を選んだ後、「千代田区」を選んだとします。

この後、何かの拍子で(例えば下のセルと間違えて)、「東京都」を他の都道府県にしてしまっても・・・
例)東京都を千葉県に変更

上のように、問題なく表示できてしまいます。
なので、こんな表も問題なく(?)作れてしまいます。

これ、困ります。
プルダウンリストは、選択したセルを固定する仕様ですので、こういうことが起こります。
千葉県千代田区、なら一発でおかしい、ってわかります。
上の表だって、県庁所在地なので、おかしいと気づきやすいでしょう。
でも、よく知らない市町村名だったら・・・気づかないでしょう。
それは困ります。
うっかりセルのデータを変えてしまうことは少ないと思いますが、可能性はあります。
こんな時、「都道府県と市町村の組み合わせがおかしい」と言うエラー表示を出せればいいのですが、タテヨコ表だけでは難しそうです。
*別セルに、該当の都道府県県の列にその市町村名があるかを調べる数式を入れておけばいいのでしょうが、都道府県ごとに列を変える必要があり、私の知識では簡単にはできません。なお、その数式を設定できたとしても、異なる都道府県に同一名の市町村が存在する場合がありますので、必ずしもすべてのエラーを拾えるわけではありません(後者の場合、そもそも、外見的には正しく見えてしまいます。)
その2 市町村コード番号が拾えない
タテヨコ表には、市町村のコード番号がありません。
従って、市町村コード番号を拾いだすことが出来ません。
下の図のように、データが一列に並んでいれば、XLOOKUP関数等で拾い出せるのですが・・・。

なお、タテヨコ表とは別に、上の図のようなデータ一覧を備えておくことにより、市町村コードを抽出することは可能です。
上の図が「市町村リスト」という名前とします。
すると、以下の数式で、都道府県&市町村のデータから市町村コードが抜き出せます。
=XLOOKUP(B2&C2,市町村リスト!B:B&市町村リスト!C:C,市町村リスト!A:A)
数式の意味:「B2&C2」(都道府県&市町村)と同じものが「市町村リスト!B:B&市町村リスト!C:C」(都道府県&市町村)にあるか調べて、その行のA列(市町村コード)のデータを表示する(返す)

この数式を使えば、あり得ない「都道府県&市町村」という組み合わせについては、市町村コードがないため、「#N/A」(ノーアンサー)と出ます。

従って、「その1」で示した、あり得ない「都道府県&市町村」についても、エラーと判断することが可能です(前述のとおり異なる都道府県にある同じ市町村名を選んだ場合には、エラーとは見做されません)。
上の1と2がトラップといえるかどうかは微妙ですが(いわゆる「仕様」)、ちょっと気に留めておいた方がいいかもしれません。
