マクロなし縛りでドロップダウンリストの項目を切り替える

マクロなし縛りでドロップダウンリスト項目を動的に切り替える

「マクロなし縛り」でExcelでの様式づくりをせざるを得なくなったので、久しぶりに関数であれこれやってみた。

ろくにワークシート関数も覚えていないのにマクロを覚えてしまったために、「欲しい機能は自分で作る」みたいになっていた。達人が見たら「そんなもん、ワークシート関数使ったら一発やろがぼけー」状態だったかも知れん。

せっかくの機会なので、ちょっとまじめにExcelのワークシート関数を使ってみた。

「データの入力規則」リストの切り替え

ユーザに変なデータ入力をさせないために、よくお世話になる「データの入力規則」。

特に、ドロップダウンリストで項目を選択させることのできる「リスト」機能は重宝する。

このリストの項目を条件によって切り替える、ということをやってみた。

準備

f:id:akashi_keirin:20170513203350j:plain

ワークシート上に、リスト用の表を2つ作る。

f:id:akashi_keirin:20170513203356j:plain

1つ目のリストには「フラワーライン」と名前を定義し、

f:id:akashi_keirin:20170513203535j:plain

2つ目のリストには「反フラワー」と名前を定義しておく。

INDIRECT関数

んで、

名前だけは知っていたけど使ったことなかったExcel関数選手権

でもやったら結構いいところまで行くんじゃないか、と個人的には思っているINDIRECT関数ですよ。

基本的には、

=INDIRECT(セル番地)

の形で、セル参照を返してくれるという関数。

たとえば、

f:id:akashi_keirin:20170513203632j:plain

こんなふうに、K5セルに「デコスケ」と入力されているときに、

=INDIRECT("K5")

を計算すると、

f:id:akashi_keirin:20170513203642j:plain

こんなふうにK5セルの値が返る。

ということは、INDIRECT関数に渡す引数を切り替えてやれば、リスト項目を切り替えることができるということになる。

「データの入力規則」の設定

f:id:akashi_keirin:20170513203507j:plain

「元の値」のところを、

=INDIRECT($E$1)

にして、E1セルに「フラワーライン」と入力すると、

f:id:akashi_keirin:20170513203552j:plain

リスト項目はこの通り。

E1セルに「反フラワー」と入力すると、

f:id:akashi_keirin:20170513203617j:plain

リスト項目が変わった。

おわりに

入力された値に応じて動的に何かを切り替える、となると、安易にWorksheetのイベントマクロなんかで済ませようと考えがちだけれど、たまに「マクロなし縛り」という状況に追い込んでみると

名前は知っていたけど使ったことなかったExcel関数

が使えるようになるきっかけになるかも知れない、と思いました。

ワークシート関数もしっかりマスターしないといけないなあ。

@akashi_keirin on Twitter