質問: エクセルに精通されている皆様!教えて下さい!! ■複数の特定文字列に優先順位をつけて該当するセルを抽出する方法教えて下さい! 。。。頭が追い付かず無駄に時間だけが過ぎてしまいます>< 【資料】 1sheet1(添付画像1) 2seet2(添付画像2) 【概要】 【添付画像1】の123の優先順位で【添付画像2】のリストから4に抽出したいのですが、indexやmatchを使ってもうまくいきません>< 【補足】 5のリストは123のおおよその複合リストです。行いたい事は【添付画像1】123の順位での複合条件で5から4に抽出したいのですが頭が追い付きません>< 5リストは【添付画像1】の321の順番でおおよその順位がついている感じです。 関数でもマクロでも出来る方法を教えて下さい!具体的なシート名や補足事項が必要な場合など お手数ですがご連絡頂ければ補足させていただきますのでお力お借りさせて下さい!
回答: No3です。以下、配列数式{}を使っています。 {=if(or(b1="",iserror(match(("*"&b1&"*"),sheet2!$a$1:$a$100,0))),"", index(sheet2!$a$1:$a$100, if(iserror(match(("*"&d1&"*")&("*"&c1&"*")&("*"&b1&"*"),sheet2!$a$1:$a$100&sheet2!$a$1:$a$100&sheet2!$a$1:$a$100,0)), if(iserror(match( ("*"&c1&"*")&("*"&b1&"*"), sheet2!$a$1:$a$100&sheet2!$a$1:$a$100,0)), if(iserror(match( ("*"&b1&"*"), sheet2!$a$1:$a$100,0)), "unmatch", match( ("*"&b1&"*"), sheet2!$a$1:$a$100,0)), match( ("*"&c1&"*")&("*"&b1&"*"), sheet2!$a$1:$a$100&sheet2!$a$1:$a$100,0)), match(("*"&d1&"*")&("*"&c1&"*")&("*"&b1&"*"),sheet2!$a$1:$a$100&sheet2!$a$1:$a$100&sheet2!$a$1:$a$100,0))))} 1行目、b列が空欄か部分一致すらしない場合は空欄にします。 3行目dcb列が部分一致したら下から2行目でそのシート2のa列を表示します。 5行目cb列が部分一致したら下から4行目そのシート2のa列を表示します。77行目b列が部分一致したら10行目そのシート2のa列を表示します。 bcd列に何が入るかわからない(デタラメ)という前提で部分一致の判断としました。こういうことは仕様で決まっていると思います。 No2さんのように、正しいデータしか入ってこないという前提で作ればもう少し簡単かもしれません。 部分一致は"*"&d1&"*"などで判定してますが、d1が空欄だと必ず一致します。この辺、人間的判断とは少しずれているかもしれません。 なお上コードは見やすさのためスペースで位置合わせしてますが、コードとしては意味ありません。詰めても大丈夫です。