構造化参照による、リスト入力規則の動的変更
※初学者向きではありません
Excelでテーブル化をおこなうと、テーブル領域はデータベース的構造となり、自動的に各部分が名前付き範囲として定義されます。
![](https://assets.st-note.com/img/1709813512231-339s0fqoIq.png?width=800)
![](https://assets.st-note.com/img/1709813536881-YfppZyKgc3.png?width=800)
各表をテーブル化して、
tabeta_table
neta_table
という名前をつけました。いま、tabeta_tableのネタ列について、入力規則を使ってリスト入力する事を考えます。
基本的なやりかたは、リボンのデータからデータの入力規則を選んで、リストで各項目をカンマ区切りで設定するものです。
![](https://assets.st-note.com/img/1709813781592-5pIPB7dMmI.png?width=800)
上の図が基本です。※例として2つのネタを設定
こうする事で、
![](https://assets.st-note.com/img/1709813851466-TD1mOtWqle.png?width=800)
このようにリストから入力できます。
いちいち手入力する必要が無くなり、入力間違いによるミスを防げます。しかし、
入力規則の選択項目それ自体を手入力する必要がある
項目が増えたら、その都度追加の必要がある
このような欠点があります。この欠点を補うために、
ネタのデータ部分を番地で参照する
データ部分に名前をつける
などの方法があります(後者はWEB版で効かないようですが)。
しかし、参照先のテーブルが別シートにあると上手く行かなかったり、そもそも名前が自動的についた所の上に、更に名前をつけるのはいかにも冗長です。したがってこのようにします。
![](https://assets.st-note.com/img/1709815592517-NoEAOugq4B.png?width=800)
=INDIRECT("neta_table[ネタ]")
入力規則の中では、ただの名前付き範囲には対応しますが、テーブルの構造化参照は直接使えないので、それをINDIRECT関数の中に入れてやります。そうすると、
![](https://assets.st-note.com/img/1709815675273-aBkKBauZVz.png?width=800)
![](https://assets.st-note.com/img/1709815754169-mgpV3tIplv.png?width=800)
図のように、テーブルのデータ部分を直接参照し、その範囲が拡張された場合も、入力規則のリストに反映されます。テーブルの名前はブックでユニークなので、どのシートにあってもちゃんと参照される訳です。
テーブルが2列以上の場合には、フィールドをブラケットで括って示す必要がありますが、1列のテーブルであれば、テーブル名だけで構いません。単にリスト用のマスターを作れば良いのなら、マスター専用のシートでも作って、1列のテーブルを置いておけばすっきり書けます。
![](https://assets.st-note.com/img/1709816935046-cipCKSZAzB.png?width=800)
UNIQUE関数やSORT関数を使ってそれをリストで参照させる方法も紹介されますが、数式が複雑になる事や、テーブル外の作業列が必要なのを考えれば、初めから、ソートされてユニークなデータからなるマスター用のテーブルを作っておくのを検討するのが良いのではないかと思われます。やるとすれば、どうしても、重複ありのテーブルからリストを生成しなくてはならない場合に留めるのが良いでしょう。
この記事が気に入ったらサポートをしてみませんか?