なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

数式/関数:ドロップダウンリストを連動させる

昔から、PC用語を前半部分だけに省略表現する人が好きになれない。

「ドロップダウンリスト」を「ドロップダウン」や「プルダウン」のように略されると気持ちが悪くなる。「リスト」であることが重要なのに。

閑話休題。複数のドロップダウンリストを組み合わせて、表示させる内容を絞り込んでいきたい場合。昔からあるのは、ずらっと横並びさせたリストを名前定義して、INDIRECT関数で名前の範囲を呼び出す方法だろう。

今更書く気にもならないが、このやり方は非常にメンテナンス効率が悪い。項目が増える度に細かい修正が必要だし、そもそもマスタを項目ごとに横並びさせるやり方は不細工だと思う。リストを2つ以上連動したい時にも困ったことになるし。

Microsoft365には便利な関数がたくさん追加されているが、TAKE/DROP関数の便利さにもっと注目してもらいたい。結果をセル範囲のまま返せる関数だからだ。

ピンとこない人もいるかもしれないので実際にやってみよう。まず D:E列に勘定科目マスタをテーブル(テーブル名「T_勘定科目マスタ」)で作成し、同じく A:B列に入力表テーブル(テーブル名「T_入力表」)を作成する。

この時、勘定科目マスタは科目順にソートしておく必要がある。……しないならしないでやりようはあるけど今回は割愛。

勘定科目マスタができたら、隣の G列に勘定科目リストを作成する。


=UNIQUE(T_勘定科目マスタ[勘定科目])

勘定科目名を重複削除しただけだから、特に説明はいらないと思う。この範囲はスピル演算子を使って参照できるので下記のように名前定義しておこう。


[名前の管理]→[新規作成] 名前:勘定科目リスト 参照範囲:=Sheet1!$G$2# →[OK]

続いて補助科目リストも名前定義。

同じく[新規作成]
名前:補助科目リスト
参照範囲:=IF(T_入力表[@勘定科目]="",T_勘定科目マスタ[補助科目],TAKE(DROP(T_勘定科目マスタ[補助科目],MATCH(T_入力表[@勘定科目],T_勘定科目マスタ[勘定科目],0)-1),COUNTIF(T_勘定科目マスタ[勘定科目],T_入力表[@勘定科目])))
→[OK]

これでおしまい。後は入力表テーブルに入力規則のリストを設定するだけ。


リストを設定する範囲を選択して[データ]→[データの入力規則] 入力値の種類:リスト 元の値:=勘定科目リスト(あるいは「=補助科目リスト」) →[OK]

これで選択した科目に応じた補助科目が表示させるようになる。勘定科目を何も設定しなければ、全ての補助科目が表示される。

リスト絞り込みだからと安易に FILTER関数を使うと、入力規則のリストが配列は参照できないのでエラーを起こしてしまう。結果をどこかに表示させれば参照できるけど、それでは複数のセルに設定ができない。これは TAKE/DROP関数だからこそできる技なのである。