Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows XP Home Edition : Excel 2002)
文字列の検索
投稿日時: 18/01/07 11:23:59
投稿者: ISBSGR

毎度お世話になります。<検字>列の各文字列で、<文句>列を検索し、一致する文字列があれば、<抽出>列に検索文字列を求めたい。見つからない時は空白にします。検字に重複はなく、2〜4文字です。できそうでできません。宜しくお願いします。
 
  <検字>     <文句>       <抽出>
3  AFC     それは簡単でない    簡単
4  あいたい    青森はリンゴです    リンゴ
5  XYZA
6  簡単      リンゴのワイン     リンゴ
7  複雑      AFXレース
8  リンゴ     CAFCD       AFC
9          台湾バナナは旨い    バナナ
10  バナナ
11     

回答
投稿日時: 18/01/07 12:35:37
投稿者: んなっと

Excel2002だとIFERRORなどが使えないので、A列の途中に空白セルがあるのはよくありません。
この種の質問で検索文字列の途中に空白セルがあるのは初めて見ました。
また下の例の「青リンゴ」と「リンゴ」のように、検索文字列に部分一致がある場合もあります。
LEN関数を使ってA列を文字数の長いほうから並べ替えておきましょう。
 
      A         B     C
 3 あいたい それは簡単でない   簡単
 4 XYZA 青森はリンゴです  リンゴ
 5 青リンゴ              
 6  AFC 青リンゴのワイン 青リンゴ
 7  リンゴ   AFXレース     
 8  バナナ    CAFCD  AFC
 9   簡単 台湾バナナは旨い  バナナ
10   複雑              
11                   
 
C3
=INDEX(A$3:A$50,MATCH(0,INDEX(0/FIND(A$3:A$50,B3),),0))&""
下方向・↓

回答
投稿日時: 18/01/07 12:58:22
投稿者: んなっと

複数ヒットする可能性があるときは
 
      A              B     C    D    E
 3 食べたい       簡単そうで複雑   簡単  複雑    
 4 XYZA      青森はリンゴです  リンゴ        
 5 青リンゴ                           
 6  AFC 青リンゴとバナナのジュース 青リンゴ リンゴ バナナ
 7  リンゴ        AFXレース             
 8  バナナ         CAFCD  AFC        
 9   簡単    台湾バナナを食べたい 食べたい バナナ    
10   複雑                           
 
C3
=INDEX($A:$A,SMALL(INDEX(ROW($3:$50)+ISERROR(FIND($A$3:$A$50,$B3))*10^4,),COLUMN(A3)))&""
右方向・→下方向・↓

回答
投稿日時: 18/01/07 18:31:05
投稿者: Mike

   A      B     C
3 AFC   それは簡単でない 簡単
4 あいたい 青森はリンゴです  リンゴ
5 XYZA
6 簡単   リンゴのワイン    リンゴ
7 複雑   AFXレース
8 リンゴ   CAFCD      AFC
9      台湾バナナは旨い  バナナ
10 バナナ
 
セル A9 は空白を避けて、スペースを入力しています。
[条件付き書式]で“エラー”のセルのみのフォント色を白に設定したセル C3 に次の配列数式を入力して、此れを下方にズズーッとオートフィル
=INDEX(A$3:A$10,MATCH(0,0/FIND(A$3:A$10,B3)))
 
【お断り】んなっと さんのアイディアを無断借用しています。m(_._)m

回答
投稿日時: 18/01/07 21:59:31
投稿者: んなっと

ちなみにA列の途中に空白セルがある時の式は
 
      A              B     C
 3 食べたい       簡単そうで複雑   簡単
 4 XYZA      青森はリンゴです  リンゴ
 5 青リンゴ                   
 6  AFC 青リンゴとバナナのジュース 青リンゴ
 7  リンゴ        AFXレース     
 8  バナナ         CAFCD  AFC
 9         台湾バナナを食べたい 食べたい
10   簡単                   
11   複雑                   
 
C3
=INDEX(A:A,MIN(INDEX(ROW($3:$50)+ISERROR(FIND(A$3:A$50,B3)/LEN(A$3:A$50))*10^4,)))&""
下方向・↓
 
今回の質問はこれでいいかもしれません。

回答
投稿日時: 18/01/08 07:54:53
投稿者: んなっと

引用:
アイディアを無断借用しています

...私のアイディアではないんです。気にしないでください。
 
昨年、この一般機能板で別の回答者が質問の趣旨からはなれた回答・
指摘を繰り返すので、警告したことがありました。
しかしMikeさんはその方とは違います。
「質問者の状況を正しく理解」しようという誠実な回答スタイルです。
Excelサロンの方でも同じですね。
 
以前からある手法ですので、どんどん使ってください。

回答
投稿日時: 18/01/08 11:17:41
投稿者: んなっと

余計な情報ですが、Excel2010以降であればA列を並べ替えなくても
「青リンゴ」「リンゴ」問題に対応できます。
 
      A         B     C
 3  AFC それは簡単でない   簡単
 4 あいたい 青森はリンゴです  リンゴ
 5 XYZA              
 6   簡単 青リンゴのワイン 青リンゴ
 7   複雑   AFXレース     
 8  リンゴ    CAFCD  AFC
 9      台湾バナナは旨い  バナナ
10  バナナ              
11 青リンゴ              
 
C3
=INDEX(A:A,MOD(1000*AGGREGATE(14,6,LEN(A$3:A$50)/(FIND(A$3:A$50,B3)>0)+ROW($3:$50)/1000,1),1000))&""
下方向・↓

投稿日時: 18/01/09 11:05:17
投稿者: ISBSGR

 みんさん有難うございました。んなっとさんの3例目でバッチシで、感動です。式の中身は良く分かりませんが、これからゆっくり研究します。Mikeさんの式は、かなり近づいてはいますが、今一歩の感じと、必ずスペース文字を入れなければならないのが難点です。通常、空白は入れませんが、追加する場合は、どこから追加したのか分かり易くするため、無意識にスペースを入れてしまいます。