【Excel関数】部分一致検索の逆引きをする【LOOKUP・SEARCH関数】
見よう見まねの初心者ですがやりたい処理の関数が見つからなかったので忘備録
■動機
見積を作る段階で客先の「会社名」「営業所名」を入力する。(画像の①部分)
営業所によって弊社担当が違う為、明記している弊社担当欄も変更が必要。(画像の②部分)
今まで手動のため変更せずに送ってしまい誤っていることが多々あった。
■希望
弊社の場合同じ会社でも営業所によって担当が異なるので「会社」「営業所」の2種類の組合せで担当が変わるようにしたい。
反映させるには「会社名」「営業所名」を入力する際のキーワードを設ける。
【例】正式名称が「株式会社バナナ商事」の場合、
会社名欄に ①㈱バナナ商事、②㈱バナナ、③バナナ商事 など人によって入力する内容が異なる。
(上司になればなるほど省略しまくってる人がいる)
事務所全員が使用するため確実に入力する「バナナ」のみを拾って反映してくれる処理が欲しい。
営業所名の場合も以下同文。
■行動
①シートを2種類作成
マスタシート(見積書担当者一覧リスト)⇒マスタ
普段使用している見積フォーマット⇒見積書
②マスタシートに一覧を作成する
C列に【客先】会社名のキーワード
D列に【客先】営業所のキーワード
E列に【弊社】担当者名
※分かりやすいようにB列に客先の正式名称を明記。(使わない)
※正式名称の中で確実に入力するキーワードのみをリストに明記
※「苺商会株式会社」には「栃木営業所」と「栃木東営業所」があり
担当者もそれぞれ異なるため区別してリスト化する。
③見積フォーマット(見積書シート)の弊社担当記入セル(M7)へ下記関数を入力
=LOOKUP(0,0/SEARCH("*"&マスタ!C4:C8&"*"&マスタ!D4:D8&"*",B4&B5),マスタ!E4:E8)
=LOOKUP(0,0/SEARCH("*"&マスタ!C4:C8&"*"&マスタ!D4:D8&"*",B4&B5),マスタ!E4:E8)
【関数の内訳】
"*"&マスタ!C4:C8&"*" ⇒ マスタシートの会社名C4~C8
マスタ!D4:D8&"*" ⇒ マスタシートの営業所名D4~D8
B4&B5 ⇒ 見積シートの会社名・営業所名入力セル
マスタ!E4:E8 ⇒ マスタシートの担当者名E4~E8
これで客先名を入力すればキーワードに反映して担当が変更してくれます。
【”*”をつける理由】
Excelで「*」や「?」を使用することをワイルドカードと言うらしいのですが
そこらへんはあまり理解していません。
今回使用した「*」は使用すると文字列の前(後)に『指定しない文字列』が含まれていたり、含まれていなくても動いてくれるとのこと。
"*"&マスタ!C4:C8&"*"の場合、リストに『もも』と指定しておけば『㈱ももカンパニー』や『株式会社もも』でも反応してくれるといったような感じです。
営業所をマスタ!D4:D8&"*"で入力しているのは指定しない文字列が後ろにしかつかないからです。(営業所、支店など)
【SEARCH関数を組合せた理由】
試行錯誤しながら最初にたどり着いたのはLOOKUP関数とFIND関数を組合せたものでしたが
FIND関数だと会社名と営業所名の2つのリストから拾う処理ができませんでした。
ちょろっと調べてみるとFIND関数だとワイルドカードが使用できなかったり?
今回したい処理にはSEARCH関数が合ってくれたみたいです。
マクロ・関数など基本的な勉強を飛ばしているため多くを説明できませんが
誰かの役に立てば幸いです。