【ID:486】数式のみで本格的な検索機能を実現!? #Excel #LifeHacks #Office
私がよく作るのは「従業員一覧」を検索できる小さな検索システムです。VBAなし(マクロなし)でも、テーブル化+関数でかなり本格的に動きます。ここでは“検索ボックスを作る”前提で、実務で使いやすい形を補足します。 1) まずはデータをテーブル化 名簿(ID、氏名、部署、役職、性別、雇用形態、勤務地など)は範囲選択→Ctrl+Tでテーブルにします。列名が固定されるので、後の数式が壊れにくいです。 2) 検索ボックス(入力セル)を用意 例:B2に検索キーワード、B3に部署、B4に勤務地…のように入力欄を作ります。ここが“検索バー”の代わりになります。 3) マクロなし検索の基本(FILTER) Microsoft 365なら、表示エリアにFILTERで抽出が一番早いです。 例(B2にキーワード、テーブル名をT従業員とします) =LET(k,$B$2, FILTER(T従業員, ISNUMBER(SEARCH(k, T従業員[氏名]&T従業員[部署]&T従業員[役職]&T従業員[勤務地])), "該当なし")) ポイントは、複数列を「&」で連結しておくと、1つの検索窓で横断検索できることです。 4) 複数条件(部署+勤務地など)をANDで追加 部署B3、勤務地B4が空欄なら無視、入力があるときだけ条件にするのが使いやすいです。 =LET(k,$B$2,d,$B$3,o,$B$4, cond,(IF(k="",TRUE,ISNUMBER(SEARCH(k,T従業員[氏名]&T従業員[部署]&T従業員[役職]&T従業員[勤務地])))) *(IF(d="",TRUE,T従業員[部署]=d)) *(IF(o="",TRUE,T従業員[勤務地]=o)), FILTER(T従業員, cond, "該当なし")) 5) 「、」で複数値検索(営業,東京,リーダー みたいに) 入力をカンマ区切りにして、高度な検索っぽくしたい時は、TEXTSPLITで分割→全語句が含まれるかを判定します。 =LET(s,$B$2,keys,FILTER(TEXTSPLIT(s,","),TEXTSPLIT(s,",")<>""), txt,T従業員[氏名]&T従業員[部署]&T従業員[役職]&T従業員[勤務地]&T従業員[雇用形態], hit,BYROW(txt,LAMBDA(r,AND(ISNUMBER(SEARCH(keys,r))))) , FILTER(T従業員,hit,"該当なし")) ※TEXTSPLIT/BYROWがない環境だと難しいので、その場合は条件欄を複数用意する方が安全です。 6) XLOOKUPの使いどころ(ID検索) 「IDを入れたら1人だけ表示」はXLOOKUPが簡単です。 =IFERROR(XLOOKUP($B$6,T従業員[ID],T従業員[氏名],"該当なし"),"該当なし") ID→氏名、ID→部署など列ごとに引けます。 7) ありがちな詰まりポイント ・空白や全角半角:TRIM/CLEAN、必要ならSUBSTITUTEで整える ・検索が遅い:検索対象列を増やしすぎない/テーブル列の連結は最小限 ・「文字列を数式として認識」させたい:入力を直接数式にする運用は事故りやすいので、基本はLETで計算を固定化しておくのがおすすめです この形にしておくと、名簿だけでなく貸出管理(誰がどこから何を借りたか)みたいなデータ分析にも転用しやすいです。まずは“検索窓1つ+FILTER”から作って、慣れたら部署・勤務地・雇用形態などを追加していくと失敗しにくいです。















