• 締切済み

エクセル:文字列の前方一致の抽出方法

エクセルについて質問です。 原本のリストから抽出したいのですが、文字列が完全一致していないので 抽出できません。前方一致で抽出する場合どうしたらよいか 教えて下さい。      A         B          C ロキソニン10mg  ロキソニン   カルデナリン1mg  アムロジン2.5 アムロジン2.5mg カロナール200mg A列に原本のリストがあって、B列に抽出したい文字列があります。 A列とB列の文字列が完全には一致していないので抽出できません、 B列と同じ文字列がA列にある場合、A列の文字列をC列に返したいのですが どのような関数を使ったらよいでしょうか? 教えて下さい。

みんなの回答

  • chonami
  • ベストアンサー率43% (448/1036)
回答No.7

フィルタオプションは如何でしょうか? 2007での操作ですが、 まず、A列頭に見出しを入れる(薬品名とか)。B列頭にも同じ見出しをいれ、抽出したい薬品名を入力する。 A列の表内のセルを選択して、データ→フィルタの横の詳細設定をクリック→ 抽出先:指定した範囲 リスト範囲:A列の表の範囲 検索条件範囲:B列の範囲 抽出範囲:C1をクリック としてOK。 (フィルタオプションは検索条件に=を入れない場合、前方一致で検索するので)

noname#204879
noname#204879
回答No.6

別解です。 添付図参照 セル B2 に次の[条件付き書式]を設定   数式が    =ISERROR(B2)   フォント色  白 セル B2 に次の配列数式を入力して、此れを右および下方にズズーッとドラッグ&ペースト {=INDEX($A$1:$A$6,SMALL(IF(LEN($A$1:$A$6)-LEN(SUBSTITUTE($A$1:$A$6,B$1,"")),ROW(A$1:A$6),""),ROW(A1)))}

noname#204879
noname#204879
回答No.5

》 A列とB列の文字列が完全には一致していないので抽出できません それでは、A列とB列の文字列が完全に一致している場合は、貴方はどうやって抽出しますか? 出来るだけそれと似た手法を考えてみたいのでお尋ねしています。

nari1231
質問者

お礼

時間がなかったのでAから6文字抽出、Bから6文字抽出して 同じならAを変えすという式でやりました。 あとでみなさんの方法を試してみたいと思います。 どうもありがとうございました。 文字列が一致しているならvlookup(B,範囲指定、1、0)でやります。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! 前方一致ではなく、検索文字が含まれていたら!になりますが・・・ 一例です。 ↓の画像のD列に検索文字列を表示しておきます。 今後検索文字列が増えても対応できるようにまず使用することはないであろう「*」アスタリクスを 入れて空白セルを範囲指定しないようにします。 画像のようにB列を作業用の列として、結果をF列に表示するようにしてみました。 作業列のB2セルに =IF(OR(ISNUMBER(FIND(D$2:D$6,A2))),ROW(),"") これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定! この画面からコピー&ペーストする場合は 上記数式をドラッグで範囲指定 → 右クリック → コピー → B2セルを選択 → 数式バー内で一度クリック → 貼り付け → そのまま(編集可能のまま) Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 このB2をオートフィルでずぃ~~~!っと下へコピーしておきます。 結果のF2セルは =IF(COUNT(B:B)<ROW(A1),"",INDEX(A:A,SMALL(B:B,ROW(A1)))) (配列数式ではありません) としてオートフィルでコピー! これで画像のような感じになります。 ※ 今後検索データが増える場合はアスタリクスの部分に検索文字列を入力すれば 結果に反映されます。 参考になりますかね?m(_ _)m

nari1231
質問者

お礼

時間がなかったのでAから6文字抽出、Bから6文字抽出して 同じならAを変えすという式でやりました。 あとでみなさんの方法を試してみたいと思います。 どうもありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

C1セルには次の式を入力して下方にドラッグコピーします。 =IF(SUM(COUNTIF(A1,B$1&"*"),COUNTIF(A1,B$2&"*")),A1,"")

nari1231
質問者

お礼

時間がなかったのでAから6文字抽出、Bから6文字抽出して 同じならAを変えすという式でやりました。 あとでみなさんの方法を試してみたいと思います。 どうもありがとうございました。

回答No.2

作業としては 1. セルC1に以下の数式を入力 =IF(B1="","",VLOOKUP(B1&"*",$A:$A,1,0)) ↑「B1&"*"」が前方一致を表します。 2. セルD1に以下の数式 =IF(B1="",0,COUNTIF($A:$A,B1&"*")) ↑VLOOKUPは見つけた1つ目を表示するので、複数一致のチェックは しておいた方がよさそうです。検索条件に合ったセルの個数が 表示されます。 3. C列、D列を下へコピー 4. D列を見て重複したものについて個別確認 絶対に複数一致がないのなら1だけでOKです。

nari1231
質問者

お礼

時間がなかったのでAから6文字抽出、Bから6文字抽出して 同じならAを変えすという式でやりました。 あとでみなさんの方法を試してみたいと思います。 どうもありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 =VLOOKUP("*"&B1&"*",A:A,1,FALSE)

nari1231
質問者

お礼

時間がなかったのでAから6文字抽出、Bから6文字抽出して 同じならAを変えすという式でやりました。 あとでみなさんの方法を試してみたいと思います。 どうもありがとうございました。

関連するQ&A