• ベストアンサー

【Excel】 部分一致検索の関数

B列の文字列に「部分一致」する、A列のデータが「いくつあるか」をC列に表示させ、D列にはそれを表示させたいです。 vlookup関数のtrueやdcount関数を使ってみましたが、うまくできません… どなたかお知恵をお貸しくださいませ。。宜しくお願いします。  A  B C D 1煮豚 煮 2 煮豚、煮牛 2包豚 焼 1 焼豚 3煮牛 揚 0  4焼牛 蒸 0 5包鶏 生 0

質問者が選んだベストアンサー

  • ベストアンサー
  • shiotan99
  • ベストアンサー率68% (140/203)
回答No.1

こんにちは~ 該当するのが複数あったとき、D列の 1つのセルに「煮豚、煮牛」とまとめるのは絶対条件ですか? YESならこの回答はこの時点でスルーしてください (T_T)/~~~ D列に煮豚、E列に煮牛‥と1つのセルに1個ずつ入れてもいいよ、という広~いココロをお持ちなら、次の方法を試してみてください。 ◆ A列は、A1:A100の範囲内にデータがあるとします。 C1セル( これはカンタン ) ---------------------------------- =IF(B1="","",COUNTIF($A$1:$A$100,"*"&B1&"*")) ---------------------------------- と入れて、B列のデータ最終行までフィルコピー。 D列以降ですが‥ ■方法その1 D1セル ---------------------------------- =IF(OR($C1="",$C1<COLUMN(A1)),"",INDEX($A:$A,100-LARGE(INDEX(ISNUMBER(FIND($B1,$A$1:$A$100))*100-ROW($A$1:$A$100),0),COLUMN(A1)))) ---------------------------------- な、長っ!て思いました? ↑の式をそのままエクセルにコピー&ペースト。 貼り付けるときは、D1セルを右クリック~形式を選択して貼り付け~テキストの方がいいかも、です。 そのあと必要なだけ右にフィルコピー( 該当するのが最大5つなら H1セルまで ) そのまますべて B列のデータ最終行まで下にフィルコピー。 A列のデータが 100を超えるなら、数式の 100をすべて修正してください。 100-LARGE と 100-ROW の 100も A列の最終行数に合わせてください。 あんまり範囲を広げすぎると処理が重くなるかもしれません。 COLUMN(A1) の A1は変更しないでください。元データが A列以外でも A1のまま。 (↑D1セルのみ。あとは右に下にコピーするだけでOK ) ■方法その2 D1セル ---------------------------------- =IF(OR(C1="",C1<1),"",VLOOKUP("*"&B1&"*",$A$1:$A$100,1,FALSE)) ---------------------------------- E1セル ---------------------------------- =IF(OR($C1="",$C1<COLUMN(B1)),"",VLOOKUP("*"&$B1&"*",INDEX($A$1:$A$100,MATCH(D1,$A$1:$A$100,0)+1):$A$100,1,FALSE)) ---------------------------------- E1の式を必要なだけ右にフィルコピー。 D1の式も含めて、すべてB列データ最終行まで下にフィルコピー。 これも範囲は適宜修正を。 COLUMN(B1) の B1は変更しないでください。検索キーワードが B列でなくても B1のまま。 ( ↑E1セルのみ。あとは右に下にコピーするだけでOK ) 方法その2は、A列に同じ名前のものはないことが前提になります。 * 少量のデータでしか検証していませんが、一応どちらの方法でもうまくいきました。 とりあえず試してみてくださいっ (^^)/

mondamintmint
質問者

お礼

おはようございます! とても親切丁寧に教えて下さり、ありがとうございます!! それと、お返事が遅くなってしまい申し訳ありませんm(_ _)m 早速試しましたところ、全てうまくいきました!!!! どの数式も知らない関数や呪文(?)が沢山あったので 私ではとうてい思いつかないようなものだったようです。 私もshiotan99さまのように、関数を使いこなせるようになるため、がんばろうと思います。 本当に助かりました、どうもありがとうございました!!! (^∇^)/~~~

関連するQ&A