問題:
部署名と課名を入力する必要があるため、プルダウンで選択できるようリスト入力を設定したいです。
部・課は、増減する可能性があり、その都度設定を変更しなくても済むようにする方法を教えてください。
■回答:
セミナーでは、OFFSET関数とCOUNTA関数を用いた「項目の増減に対応するリスト入力」と
名前の定義とINDIRECT関数を使った「二段階リスト」をそれぞれ紹介していますが、
この2つを単純に組み合わせることはできません。
INDIRECT関数がOFFSETに対応していないことが原因です。
二段階の可変対応リストを作成するには2つの方法があります。
大項目となる部署名に関しては、どちらのやり方も共通です。
データの入力規則の元の値ボックスに以下のように数式を設定します。
=OFFSET(マスタ!$A$1,0,0,1,COUNTA(マスタ!$1:$1))
問題となるのは、小項目の「課」です。
それぞれのやり方を見てみましょう。
◆テーブル機能を使う
まずは、各部署ごとに、テーブルを作成します。
図のようなデータの場合、テーブルにしたい範囲をそれぞれ選択する必要があります。
次に、各部に属する課の部分に「名前の定義」を行っていきます。
すべての部署のテーブル化と名前の定義が完了したら、準備完了です。
入力シートのB3セルに、以下のようにデータの入力規則を設定します。
=INDIRECT(A3)
この方法では、比較的簡単な方法で二段階の可変リストに対応することができます。
ただし、大項目となる部署数分のテーブル化と名前定義が必要となり、
単純作業ですが手間がかかります。
また、課が増える分には自動で対応されますが、
部が増えた場合には、テーブルと名前定義を新しい部署に設定する必要があります。
◆OFFSET関数を組み合わせて設定する
部・課両方の増減に自動対応する二段階リストを作成するためには、
OFFSETをさらに組み合わせて実現します。
まずは、名前定義に設定する「課」の数式を見てみましょう。
・課
=OFFSET(マスタ!$A$1,1,MATCH($A$3,マスタ!$1:$1,0)-1,COUNTA(OFFSET(マスタ!$A:$A,0,MATCH($A$3,マスタ!$1:$1,0)-1))-1,1)
■解説:
「課」の名前定義は、ご覧のように非常に長いものになっています。
いきなりこの数式を理解しようとしても大変なことになってしまいますので
順序よく考えていくようにします。
まず、A列の営業部だけを増減対応させる場合は、名前の定義で、
=OFFSET($A$1,1,0,COUNTA($A:$A)-1,1) ・・・ ①
このように数式を入れれば良いことを、まずはご理解下さい。
この数式は、A列限定の数式になっています。
そこで、このA列が自動で右にずれれば良いと考えられます。
参照範囲をずらすには、OFFSET関数を使います。
したがって、上記数式のうち、OFFSETの第三引数の横にずらす数値と、
A列部分($A:$A)にOFFSETを組み込むようにします。
では、何列分横にずらすかになりますが、
入力シートのA3セルの値が、マスタシートの1行目で何番目にあるかがわかれば、
その分だけずらせば良いことになります。
ある値が、ある範囲内の何番目にあるかを調べるにはMATCH関数ですね。
=MATCH(入力$A3,マスタ!$1:$1,0) ・・・ ②
これで、列位置を取得できました。
①の数式の第三引数は0となっていて、基準セル($A$1)を横にずらす指定になりますので、
ここに、②の数式を組み込みます。
ただし②のMATCH関数で出る値はA3セルが「営業部」なら1ですが、
その時にずらす数値は0になりますので、②-1と、調整値を加えて組み込みます。
=OFFSET(マスタ!$A$1,1, MATCH(入力$A3,マスタ!$1:$1,0)-1
次は、$A:$Aを横にずらすのでOFFSET関数をさらに組み込んでいくことになります。
考え方は前述と同様となります。
=OFFSET(マスタ!$A:$A,0,MATCH(入力!$A3,マスタ!$1:$1,0)-1)・・・ ③
OFFSETの第四・第五引数は省略可能で、省略した場合は、基準セル範囲と同じ大きさになります。
ここでは列全体となります。
この③を、$A:$Aの代わりに組み込んで、当初の数式が完成します。
あとは、B3セルにデータの入力規則で、元の値ボックスに「課」を設定すればOKです。
以上で完成になりますが、とても長く難しい数式です。
Excelの数式としては、最上級の難しさといっても過言ではありません。
この場合では、A列に縦方向に部署名を入れていく場合には使用できますが、
それ以外の複数個所で使用する場合はそれぞれに名前定義が必要となってしまいます。
そのような場合は、相対参照を使ってさらに工夫することで解決できます。
【関連記事】
OFFSET関数
COUNTA関数
INDIRECT関数
MATCH関数
6大必須関数(3) COUNTA関数~データの「件数」を見る関数
独学でやってきた方、体系的に学びたい方、もっと効率的に使いたい方へ…
過去10年間毎週開催・400回以上の開催で3700名以上が参加したExcelセミナーです。
実務直結・超実践型・一日完結・生涯無期限アフターサポートがついてます。