リストから特定の文字だけでなく前の文字群も抜き出す方法

このQ&Aのポイント
  • 商品リストから特定の文字が入っているセルを抜き出す方法をご紹介します。また、その前の文字群も合わせて抜き出すための方法も解説します。
  • エクセルの商品リスト内から特定の文字列が含まれるセルを抜き出す方法について説明します。さらに、抜き出すセルの前の文字群も取得する方法も紹介します。
  • この記事では、エクセルの商品リストから特定の文字列を含むセルを抜き出す方法について詳しく解説します。さらに、抜き出すセルの前の文字群も取得する方法もご紹介します。
回答を見る
  • ベストアンサー

リストからある文字だけでなく前の文字群も抜き出す

おはようございます。 お世話になります。 商品リストから特定の文字が入っているものを抜き出したいのですが、 それだけではなく、その前の文字群も合わせて抜き出したいのです。 しかもその文字群は文字数にも幅があるため、前の文字一字だけを 抜き出すだけでは不十分です。 ・商品リストはエクセル(excel2010)です。 ・シート内のレイアウトは以下です。 【列】 A列:商品名 (例) 販売物A(12345_1212ab)<オススメ!><子供用> 販売物B(6789_1212ab)<今だけ1円です><大人用> 販売物C(44444)<買わないで!><じじばば用> 販売物D(9999999999_1212ab)<1個1000円、100個でも1000円!!><初回購入特典> となります。 この状況下で、「_1212ab」が入っているセルが抜き出したい対象のセルで、 抜き出したい文言は「(×××_1212ab)」になります。 上記の例で行くと販売物A,B,Dが抜き出したい対象で、抜き出したい文言は (12345_1212ab) (6789_1212ab) (9999999999_1212ab) になります。()はあってもなくてもよいです。 よろしくお願いいたします。

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

  • ベストアンサー
  • itu1989
  • ベストアンサー率44% (37/83)
回答No.1

【式で作るイメージ】 (1)検索対象文字列の出現位置を検索する。(今回だと「_1212ab」) (2)先頭から(1)の出現位置までの文字列を対象に「_」(アンダーバー)が存在するかをチェックし、存在する場合のみ以降の処理を実行する。 (3)先頭から(1)の出現位置までの文字列を対象に「(」の出現位置を検索する。 (4)(3)の出現位置から(1)の出現位置+検索対象文字列+1の位置までの文字列を抜き出す ※対象文字列のルールとして抜き出し対照の文字列が()で囲われている事を前提とする ※「(」の出現位置から条件の出現位置+条件の文字数+1(最後の+1は「)」を含めるようにする為 検証はしていませんイメージです。 このイメージで式を組めば取得できると思います。 【完全手動】 対象の文字列が()で囲われている事を前提として (1)Excel上で検索対象文字列を含むレコードのみになるようにフィルタをかける (2)対象をコピーして正規表現での置換が可能なテキストエディタへ貼り付ける (3)「(」を「\t」へ置換 (4)「)」を「\t」へ置換 (5)置換後のテキストをExcelへ貼り付ける(必要なら別シート) Excelはタブ区切りを別列として認識するので貼り付けると以下のようになる A列   B列      C列 販売物A 12345_1212ab <オススメ!>...

ARIES10
質問者

お礼

さっそくどうもありがとうございました。 【式で作るイメージ】 勉強になりました。そうなんですよね、 関数ってどういう関数を知っているかじゃなくて どういう風にイメージするか、で、 それに見合う関数を探すんですよね。 そのイメージ力が私はまだ低いのでこういう アドバイスは大変勉強になります! 今度やってみます。 【完全手動】 手順が少ないのでできるにせよできないにせよ 早めに結果が出ると思ってこちらでやってみました。 補足に書いたとおりになりましたが、ヒントになったので 「\t」ではなく、半角スペースにエクセル上で変換し その後、タブ区切りボタンで切り分けたところ、 うまく結果が得られました! お早いお返事に大変助かりました。 どうもありがとうございました!

ARIES10
質問者

補足

(3)「(」を「\t」へ置換 (4)「)」を「\t」へ置換 (5)置換後のテキストをExcelへ貼り付ける(必要なら別シート) をやりましたが「\t」をタブ区切りと認識しないようで そのまま貼り付けられてしまいました。 後日「\t」についてもう少し調べてみます。

その他の回答 (1)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

横から失礼致します。  自動で行うのでしたら以下の様にされると良いと思います。  今仮に、元データがSheet1のA2以下(Sheet1のA1セルには「商品名」等の様に項目名が入力されているものとします)に入力されていて、抜き出した結果をSheet1のC2以下に表示させるものとします。  又、Sheet2のA列を作業列として使用するものとします。  まず、Sheet2のA2セルに次の関数を入力して下さい。 =IF(COUNTIF(INDEX(Sheet1!$A:$A,ROW()),"*(*_1212ab)*"),ROW(),"")  次に、Sheet2のA2セルをコピーして、Sheet2のA3以下に貼り付けて下さい。  次に、Sheet1のC2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNT(Sheet2!$A:$A),"",REPLACE(LEFT(INDEX($A:$A,SMALL(Sheet2!$A:$A,ROWS($2:2))),FIND("_1212ab)",INDEX($A:$A,SMALL(Sheet2!$A:$A,ROWS($2:2))),FIND("(",INDEX($A:$A,SMALL(Sheet2!$A:$A,ROWS($2:2))))+1)+LEN("_1212ab)")-1),1,FIND("(",INDEX($A:$A,SMALL(Sheet2!$A:$A,ROWS($2:2))))-1,))  次に、Sheet1のC2セルをコピーして、Sheet1のC3以下に貼り付けて下さい。  以上です。  因みに、手動で行うのでしたら以下の様にされると良いと思います。(但し、一部は半自動)  使用していない適当な列(出来れば別のシートの列)の適当なセルに次の様な関数を入力 =Sheet1!A1&"("    ↓ 上記のセルをコピーして、そのセル以下のセル範囲に(元データのデータ数以上の行数になる様に)貼り付ける    ↓ 最初に関数を入力したセルとコピー先のセル範囲を纏めて範囲選択    ↓ 選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック    ↓ 現れた選択肢の中にある[コピー]をクリック    ↓ 選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック    ↓ 現れた選択肢の中にある「123」と記されたクリップボードのアイコン([値]のみ貼り付け)をクリック    ↓ [ホーム]タブの「スタイル」グループの中にある[検索と選択]ボタンをクリック    ↓ 現れた選択肢の中にある[置換]をクリック    ↓ 現れた「検索と置換」ダイアログボックスの「検索する文字列」欄に _1212ab)* と入力    ↓ 「検索と置換」ダイアログボックスの「置換後の文字列」欄に _1212ab と入力    ↓ 「検索と置換」ダイアログボックスの[すべて置換]ボタンをクリック    ↓ 「検索と置換」ダイアログボックスの「検索する文字列」欄に *( と入力    ↓ 「検索と置換」ダイアログボックスの「置換後の文字列」欄に入力されている文字列を全て削除し、「置換後の文字列」欄を空欄にする    ↓ 「検索と置換」ダイアログボックスの[すべて置換]ボタンをクリック    ↓ 「検索と置換」ダイアログボックスの[閉じる]ボタンをクリック    ↓ [ホーム]タブの「スタイル」グループの中にある[並べ替えとフィルター]ボタンをクリック    ↓ 現れた選択肢の中にある[フィルター]をクリック    ↓ 選択されているセル範囲の右上の隅に現れた「▼」マークのボタンをクリック    ↓ 現れた選択肢の中にある(空白セル)の所のチェックマークを外す    ↓ ダイアログボックス内にある[OK]ボタンをクリック    ↓ 選択範囲を示す黒い太枠の内側にカーソルを合わせてマウスを右クリック    ↓ 現れた選択肢の中にある[コピー]をクリック    ↓ コピー元のセル範囲よりも下の位置にある適当なセルを右クリック    ↓ 現れた選択肢の中にある、書類が貼られているクリップボードのアイコン([貼り付け])か「123」と記されたクリップボードのアイコン([値]のみ貼り付け)のどちらかをクリック    ↓ コピー元のセル範囲をクリック    ↓ [ホーム]タブの「スタイル」グループの中にある[並べ替えとフィルター]ボタンをクリック    ↓ 現れた選択肢の中にある[フィルター]をクリックして、「フィルター」モードを解除  これで、最後の貼り付け先の所に抜き出した結果が現れます。

ARIES10
質問者

お礼

ご親切にありがとうございました。 自動の手法を試させていただいたところ、 魔法のように結果が得られました。 INDEXとFINDとREPLACEが繰り返し出てきていますね! キーになる文字を目印にその前後の文字たちを どうにかして一塊で特定して、REPLACEで取り除いて いるのでしょうか。(ものすごく当てずっぽう) 一見しただけでは仕組みがわからないむずかしさでしたが 実にスマートに結果を得られました。 すべての理解まで行かなくとも、次回似たような状況下で 応用するくらいにはなりたいと思います! 手動の方も後日トライさせていただきます。 どうもありがとうございました。

関連するQ&A

  • 文字列リストから文字列リストの抽出

    A列のリストの文字列に、B列のリストの文字が含まれていたらそれを取り出すにはどうしたらよいでしょうか? ※画像を参照してください。 例:A2セルの文字列にB2~B4の文字が含まれていないかをチェック、含まれていた文字列(B2~B4の内容)をC列に表示する。 関数なら何とかできますが、マクロの知識がほとんどありませんのでマクロが必要になるようでしたら詳しく教えていただければ幸いです。 よろしくお願いいたします。

  • 表にリストの文字列を含むセルに着色したい

    いつも大変お世話になっております。 添付図のような文字列がちりばめられた表から、範囲を指定してリストに入力した文字列を含むセルにリストの色で着色したい。 これを今まで手作業してましたが、ソロソロ限界ですので何とかならないかと。。。 例えば、A列からD列の表で、B5:C10の範囲を指定して、別に枠取りしたリストに文字列を入力すると、リストの色を前方一致で、図の場合、B7とC8が緑、B9は青に・・というように着色したいのです。 表の大きさやリストの対象文字列の数はシートによってマチマチです。 検索対象範囲、リストの範囲はコード中で指定出来れば汎用性がでるのでありがたいです。

  • excelのリスト絞り込みで困っています。

    下記のようなデータがシートにあった場合 A列         B列         C列 商品コード     商品コード1     品番 AA          AA          A1 AB          AA          A2 AC          AA          A3 ZZ          AB          B1            AC          C1 D列に商品コードの入力規則によるリストを指定。 E列に品番の入力規則によるリストを指定し 選ばれた商品コードに該当する品番を E列のリストに表示したい場合はどうしたらよいのかご教授ください。 D列のリストでAAを選んだら E列の品番のリストにはA1とA2とA3が出るというイメージです。 その際にZZを選ばれた場合は、品番のリストが無いのでエラーとする方法も あわせて教えてください。

  • セル内の一部文字列を消去のマクロ

    Excelで A1セル~A100セルまでに文字列が  ****(**) (****)というように入っています。 なお*は任意の文字を表す (条件) ( )で囲まれた文字列群は2つある。 (したいこと)A1セル~A100セルまでを対象に2番目の( )で囲まれた文字列群を消去するマクロを作成したい。      どう記述すればいいか。        処理前 A1: ****(**) (****) A2:*****(**) (****) A3:****(**) (*****) 以下略 処理後 A1: ****(**)  A2:*****(**)  A3:****(**)  以下略

  • エクセル オートフィルタのようなリストを出したい

    下記のようなリストがあったとして、 ED0432 FG1512 AB0032 FG1512 FV1513 AB0032 この情報がはいっている列をオートフィルタにかければ実際に使われている文字列は『AB0032』『ED0432』『FG1512』『FV1513』の4種類だとわかるのですが、これを別のセルに『種類』として表示させることはできるでしょうか? 同じ列のセルに違う文字列が入ってきたら自動的に種類リストに追加されるような形が理想的なのですが・・。 関数でもそれ以外の方法でも、わかる方がいたら教えてください。 よろしくお願いします。

  • エクセルの文字リストを設定するには?

    今、簡単なエクセルを使って仕訳をしています。 Aの列は、勘定科目を入力するようになっている。 A列にセルを持ってくると、項目が出てきて その項目リストから選びクリックすれば (例えば、事務消耗品費)と文字入力しなくてもいいようなことをしたいのです。 よろしくお願いします。

  • エクセルで文字をばらす方法

    今A1のセルに10文字以内の全角の文字列が入っています。 この文字列をばらしてそれぞれ先頭文字から一つづつ セルに格納していきたいのですが可能でしょうか? (例) A1のセルに”はじまして”の文字列が入っている これをばらして A2のセルには "は" B2のセルには "じ" C2のセルには "め" D2のセルには "ま" E2のセルには "し" F2のセルには "て" と入れたいのですが、やり方ご存知の方教えて頂けないでしょうか?よろしくお願い致します

  • 【excel2003 vba】指定した文字列が入力されている「セル範囲」の表示方法?

    ◎Sheet1  A B C D E 1○○○-- 2○○○×× 3---×× 4×○--- ※「-」は空白 上記のようにセルに「○」「×」が入力されている「Sheet1」シートがあります。(例として○×の2種類を使っていますが、本当はもっとたくさんの種類の文字列があります。) vbaを使って、以下の一覧表を「List」シートに作成するコードを作成できませんでしょうか? ◎List  A     B 1○     ×  '文字列の種類 2A1:C2  D2:E3 '文字列の範囲  3B4     A4  '同上 【ToDo】 (1)1行目に文字列(○、×)を入力する (2)1行目に入力してある文字列が入力されているすべての「セル範囲」を2行目以降の各列に抽出する。 **1セル内に「○」「×」の両方が入力されているものもある。**  ⇒例えば、A1セルに「○×」と入力されていたら、「Rist」シートのA列B列の両方に「A1」が抽出されるようにしたい。 1セルごとのセル番地(○:A1,A2,B1,…)を一覧化することはできるのですが、同じ文字列をまとめた「範囲」の抽出ができないのです。 どなたかお力添えをお願いできませんでしょうか? 宜しくお願い致します。

  • エクセルでリストの文字を大きくしたい

    エクセルで,表を作っていて,ある列のセルに入力規則で,リストを持たせているのですが,そのリストが表示されるときの文字(▼をクリックしたときに開くウインドウの中の文字)のフォントを大きくすることは出来るでしょうか? 表示画面の関係で,ズームは固定しなければなりません。

  • エクセル セル内にリスト化された特定文字列の検索

    セルが下記の文字列を含みます、その際に各セルに検索候補キーが含まれるかどうかを チェックしたいのが目的となります。 ググったりINDEXとかいろいろ使ってみたのですがうまくいかずお助けください。 任意の文字列がはいったセル A1: 明日天気になれ A2: 晴れです、明後日は A3: 吹雪、嵐です A4: 中央高速 A5: 首都高速 検索したいキーワード D1:明日 D2:嵐 D3:首都 得たい結果 任意の文字列を含むセルが複数(A:A)あり、そのセル内にリスト化(D1:D3)されたいくつかの キーワードが含まれるか検索し、ヒットした場合、そのキーワードを表示するというものです。 期待される出力結果 A1: 明日天気になれ          B1:明日 A2: 晴れです、明後日は        B2: A3: 吹雪、嵐です            B3:嵐    A4: 中央高速              B4:    A5: 首都高速              B5:首都   尚、Aには検索したい複数のキーワードは同時に含まれていないという前提での処理で かまいません。(今後精査する可能性はでてきそうですが、、) よろしくお願いいたします。

専門家に質問してみよう