連動したリストボックスで値入力! #Excel #LifeHacks #Office #TikTokSRP
私がよく作るのが、OCRにもある「出張申請書」みたいな入力フォームです。部署を選ぶ→その部署の人だけ氏名候補に出る→最後に申請者名セルへ反映、まで連動すると入力ミスがかなり減りました。ここでは“つまずきやすい所”を中心に補足します。 まず、部署マスタ(例:部署列=I13:I19、氏名列=J13:J19)を用意して、部署の重複を除いた一覧を別セルに作ります。365なら =UNIQUE(I13:I19) が一番ラクです。ここで大事なのは「空白や表記ゆれ(全角半角スペース)」があると、別部署扱いになって候補が増えること。可能なら元データ側で TRIM/ CLEAN をかけるか、入力規則で表記を固定しておくと安定します。 次に、部署用リストボックス(フォームコントロール)の「入力範囲」に UNIQUE の結果範囲、「リンクするセル」に番号を返すセル(例:I11)を指定します。リンクセルは“選択した項目の位置(1,2,3…)”が入るだけなので、表示したい部署名は別セルで INDEX を使います。例:部署表示セルC4に =INDEX(部署一覧範囲, I11) 。 よくあるハマりが「先頭を空にしたい」ケースです。未選択状態を作るために、部署一覧の先頭に空欄を置くと、未選択時にI11=0になることがあります。そのまま =INDEX(...) を使うとエラーになりやすいので、=IF(I11=0,"",INDEX(部署一覧範囲,I11)) のようにガードすると安心です。OCRにもある“末尾に空("")を付ける”小技(=INDEX(...)&"")は、0やエラーを見た目上整えるのに便利でした。 氏名側は、選択部署(例:C4)に一致する人だけ抽出します。365なら FILTER が手早く、=FILTER(J13:J19, I13:I19=C4, "") のようにして氏名一覧をスピル表示。これを氏名リストボックスの入力範囲に指定します(スピル範囲を参照できる環境なら # を使って =FILTER(... ) の結果セル# を参照すると管理が楽です)。 最後に、氏名リストボックスのリンクセル(例:J11)を使って申請者名セルへ =IF(J11=0,"",INDEX(氏名一覧範囲, J11))。ここまで組むと「部署→氏名」の連携が完成します。 導入事例としては、出張申請書だけでなく、備品申請(カテゴリ→品名)、問い合わせ管理(種別→担当者)、工数表(プロジェクト→作業者)などにもそのまま流用できます。ポイントは“リンクセルは番号、表示はINDEX”と覚えることでした。