すみません、思い込みで「0/1(=0)」を「1/0(=エラー)」と勘違いしていました!
@のパターン
=IFERROR(LOOKUP(1,0/FIND(D$2:D$4,A2),E$2:E$4),"")
=IFERROR(LOOKUP(1,0/{FIND(D2,A2),FIND(D3,A2),FIND(D3,A2)},E$2:E$4),"")
=IFERROR(LOOKUP(1,0/{#VALUE!,#VALUE!,1},E$2:E$4),"")
=IFERROR(LOOKUP(1,{#VALUE!,#VALUE!,0},E$2:E$4),"")
LOOKUPの検索値「1」の近似値は「#VALUE!,#VALUE!,0」の内「0」のみなので、3番目の配列に相当するE4を返す
いずれの値も含まない場合は「#VALUE!,#VALUE!,,#VALUE!,,#VALUE!・・・・」とエラーばかりの配列になるので、IFERRORでブランクに置き換える
この考えでいかがでしょうか。
上記の場合1つわからないのが、LOOKUPの検査値を「0」ではなく「1」にしないのはなぜかということです。
0/FIND(・・・ で含まれる場合は必ず「0」が配列に入るので、近似値の「1」ではなく「0」を入れないメリットが何かあるのでしょうか?
Aのパターンについて
=INDEX(E:E,MATCH(0,0/FIND(D:D,A2),0))&""
=INDEX(E:E,MATCH(0,0/{FIND(D2,A2),FIND(D3,A2),FIND(D3,A2)},0))&""
=INDEX(E:E,MATCH(0,0/{#VALUE!,#VALUE!,1},0))&""
=INDEX(E:E,MATCH(0,{#VALUE!,#VALUE!,0},0))&""
=INDEX(E:E,3)&""
@の勘違いを踏まえて、ここまで自分で考えてみたのですが、返す文字列の範囲を列選択するとE1の項目も含まれてしまってずれてしまうのでは?となったあたりで訳がわからなくなってしまいました。
考え方の不足・誤りについてご指摘をお願いします。