- ベストアンサー
エクセルで文字列の中からいくつかの文字列を抽出したい
次のようなリストがあります。 A1 トヨタボクシー A2 トヨタ ヴォクシー A3 ホンダ ステップワゴン A4 本田フィット A5 アコード A6 スズキアルト A7 ワゴンR A8 日産スカイライン A9 ニッサンプレセア このリストから、抽出条件のリスト トヨタ ホンダ 本田 スズキ 鈴木 ダイハツ ・・・ を使って、メーカー名を抽出したいのですが、どのような方法があるでしょうか? 抽出元のリストには、メーカー名が入っていたりいなかったり、漢字であったりカナであったりと統一性がありません。そのリストから、「日産~」「ニッサン~」と入力されているものは、「ニッサン」として抽出したいのです。 しかも、抽出した残りの、社名「ニッサンスカイライン」の「スカイライン」を、「日産プレセア」の「プレセア」の部分をついでに抽出したいのです。 ご存じの方、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
◆Sheet1 A B C 1 トヨタボクシー トヨタ ボクシー 2 トヨタ ヴォクシー トヨタ ヴォクシー 3 ホンダ ステップワゴン ホンダ ステップワゴン 3 本田フィット ホンダ フィット 4 アコード #N/A #N/A 5 スズキアルト スズキ アルト 6 ワゴンR #N/A #N/A 7 日産スカイライン ニッサン スカイライン 8 ニッサンプレセア ニッサン プレセア ◆Sheet2 A B 1 トヨタ トヨタ 2 ホンダ ホンダ 3 本田 ホンダ 5 スズキ スズキ 6 鈴木 スズキ 7 ダイハツ ダイハツ 8 日産 ニッサン 9 ニッサン ニッサン 1)Sheet2にB列に統一メーカー名を入力します 2)Sheet1のB1の式 B1=LOOKUP(1,0/FIND(Sheet2!$A$1:$A$8,A1),Sheet2!$B$1:$B$8) ★下にコピー C1=TRIM(SUBSTITUTE(A1,LOOKUP(1,0/FIND(Sheet2!$A$1:$A$8,A1),Sheet2!$A$1:$A$8),)) ★下にコピー 3)ただし、メーカー名のないものは、エラーになります
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
これは仮の例ですか。 まずVBAででもやらないと複雑になると思う。 まず4つのやらなければならないことがある。 (1)表記の統一 日産ー>ニッサン、スカイラインー>プレセアの類 別列作業列ににSUBSTITUTE関数で右辺の文字に変換 間のスペースも置換操作でなくす。 (2)抽出メーカー名の入力 どういう形式で抜き出したものをシートに表示したいのか 質問に出さないと、質問にならない。 (3)抽出 関数でやりたいのかな。およその方法で、質問に明記すべし。 VBAとかある。 (4)作表 関数でやる場合は(3)と一体だが、作表が必要。 ーーー この課題に対し。、質問者はどれほど勉強しましたか。どこでつまずいたのか。何も書いてない。○投げの類です。 ーー ホンダは2行以上に出てくるわけだが、MATCHやVLOOKUP関数は最初のものしかヒットしない。 ですから複数該当抜き出しは非常に技巧的な手法が必要。 それにホンダなどの文字列が分離されていないのが痛い。 トヨタニッサンといった2社名が含まれる社名は無いものとする。 ーー 社名ー車種 分離方法の例 例データA2:A4 スペースはなしに統一して後に下記を考える ホンダフィット トヨタボクシ ニッサンティーダ ーー G2:G4 社名一覧(分離用) トヨタ ニッサン ホンダ ーー ユーザー関数 作り方は http://www.excel.studio-kazu.jp/mag2/backnumber/mm20040629.html などにあります。 WEB照会 「エルセル ユーザー関数」で。 Function fnd(a, b) Dim cl As Range For Each cl In b p = InStr(a, cl) If p <> 0 Then fnd = Len(cl) Exit Function Else End If Next fnd = "NF" End Function ーー C2セルに =MID(A2,1,fnd(A2,$G$2:$G$4)) と入れてC4まで式を複写 D2セルに =MID(A2,fnd(A2,$G$2:$G$4)+1,LEN(A2)-fnd(A2,$G$2:$G$4)) と入れてD4まで式複写 結果C2:D4 ホンダ フィット トヨタ ボクシ ニッサン ティーダ ーー 後は上記C列で並べ替えするなりして、者別ー車種名を知ってください。 ーー その後 ちょっと変わったやり方で例示してみる。 例データ A1:B A列 B列 (A列のfとB列のfは関係ありません。 例作成手抜きのため使っただけ) 社名 車種 a x s d d w f s a x d e f g w q s f s d a y d w s y データーピボットテーブル・・ レイアウトのボタンを押したところで 行ー>社名 列ー>車種 データー>車種 ーー 出来上がった表 データの個数 / 車種 車種 社名 d e f g q s w x y 総計 a 2 1 3 d 1 2 3 f 1 1 2 s 2 1 1 4 w 1 1 総計 2 1 1 1 1 1 2 2 2 13 これでA列に社名、第4行に車種名が出て表に出てきた頻度がわかる。 ーー 関数でやりたければ、2条件の検索になる
補足
大変詳細なご回答をありがとうございました。○投げですみません。どのような方法があるのか広く知りたかったので。 かなり難しそうですが、がんばってやってみます。結果はまたいれさせていただきますが、取り急ぎお礼まで。
- n-jun
- ベストアンサー率33% (959/2873)
会社名と商品名に分けていきたいと言う事でしょうか? 車メーカー+車名は例題ですか?
補足
まさに「車メーカー+車名」のリストになります。
- guchi_yama
- ベストアンサー率47% (57/119)
>抽出元のリストには、メーカー名が入っていたりいなかったり、漢字であったりカナであったりと統一性がありません。 統一性のない場合、まず統一することから始めた方がいいのでは? 自動車メーカーなんて10社も無いと思うので、 そんなに大した作業にはならないと思います。 しかし、社名が入っていない車に関しては、 車に疎い私には車名を聞いてもどこのメーカーの車か分からないので、 どうしようもありません。 統一させる1つの案として、編集 → 置換 より、 検索する文字列に 日産 置換え後の文字列に ニッサン と、入れれば漢字の日産をニッサンに変えることが出来ます。 これを何度か行って会社名を統一していけば、 オートフィルタを使って、 オプションより”ニッサン” ”で始まる” とすれば、ニッサンの車が抽出できます。 これを別のセル等にコピーして、 置換より、 検索する文字列に ニッサン 置換え後の文字列に 『空白』 ← 無入力 とすれば、会社名を消す事が出来ます。
お礼
さっそくのご回答ありがとうございます。参考にさせていただきます。
お礼
お礼が遅くなりました。 教えていただいたとおりで見事にできました。しかし、lookup(1,0~の式の「1、0」のところの意味が分からず、長い間悩んでおりました。もしよろしければ、lookupとfindの間の数字が表すところの意味を教えていただけますでしょうか。
補足
早速のご回答ありがとうございました。 がんばってやってみます。結果はまたいれさせていただきますが、取り急ぎお礼まで。