Excelで文章から特定の単語を抜き出す方法

このQ&Aのポイント
  • Excel2007を使用して、文章中から特定の単語を抜き出す方法をご紹介します。
  • 複数の単語や文章がある場合にも対応しており、柔軟な抽出が可能です。
  • 見つかった単語は、文章の横などに表示することができます。
回答を見る
  • ベストアンサー

Excelで文章から特定の単語を抜き出したい

Exel2007で、文章中から特定の単語を抜き出したいと考えています。 1)単語は複数あり、今後増える可能性や変更されることがあります。 2)文章は複数あり、今後増える可能性や変更されることがあります。 3)単語は文章中に複数ある場合や、全くない場合など様々です。 4)単語が見つかった場合、それを文章の横などに表示したいです。 こういった場合、どういった方法があるでしょうか? A列     B列            C列 単語    文章            抽出した単語 ●●    ▲▲は□□です。    ▲▲ ■■    ○○は■■です。    ■■ ▲▲    ●●は□□です。    ●●  ・     ▲▲は■■です。    ▲▲ ■■  ・     ○○は□□です。      ・     ▲▲は▲▲です。    ▲▲ よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

1つのセルの中に「▲▲ ■■」のように2つ以上の結果を出させるのは合理的な方法がないので,C列に1つ目のヒットした単語,D列に2つ目の単語,のように表示させます。 C2に =IF(COLUMN(A2)>SUMPRODUCT(COUNTIF($B2,"*"&OFFSET($A$1,0,0,COUNTA($A:$A),1)&"*")),"",INDEX($A:$A,SMALL(IF(ISNUMBER(FIND(OFFSET($A$1,0,0,COUNTA($A:$A),1),$B2)),ROW(OFFSET($A$1,0,0,COUNTA($A:$A),1)),999),COLUMN(A2)))) と記入してコントロールキーとシフトキーを押しながらEnterして入力する C2を右に下にコピーしておく。 #どうしても1つのセルに結果を出させたいときは,マクロを使って自作の関数を作成した方が簡単です。 参考: ALT+F11を押してVBE画面を出す 挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける Private Function myS(a As Range, b As Range)  Dim Target As Range  Dim h As Range  Dim res As String  Set a = a.Cells(1)  Set Target = Application.Intersect(b, b.Parent.UsedRange)  For Each h In Target  If InStr(a, h) Then  res = res & h & " "  End If  Next  myS = Application.Trim(res) End Function ファイルメニューから終了してエクセルに戻り,セルに =mys(B2,A:A) のように記入して計算させる。

migiwanite
質問者

お礼

ありがとうございます!できました! 両方試してみたのですが、マクロの方は処理が重すぎて現実的では無さそうなので関数の方で行きたいと思います。 ただ、間に列を増やすとおかしくなってしまいました。 A列  B列  C列  D列     単語      文章 とすると関数の「A列」を「B列」に、「B列」を「D列」に書き換えてもうまくいきません・・・ でも本当に助かりました!

その他の回答 (2)

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

 簡単な方法として、作業用シートを設けるという方法もあります。  今仮に、元データが存在するシートがSheet1であり、Sheet2を作業用シートとして使用するものとします。  まず、Sheet2のA1セルに次の関数を入力して下さい。 =IF(AND(INDEX(Sheet1!$A:$A,ROW(Sheet1!$A$1)+COLUMN())<>"",ISNUMBER(FIND(INDEX(Sheet1!$A:$A,ROW(Sheet1!$A$1)+COLUMN()),INDEX(Sheet1!$B:$B,ROW(Sheet1!$B$1)+ROW()-1)))),ROW(Sheet1!$A$1)+COLUMN(),"")  次に、Sheet2のA1セルをコピーして、縦方向はSheet1のB列において文章を入力する欄の行数を上回るのに充分な行数、横方向はSheet1のA列において単語入力する欄の行数を上回るのに充分な列数、をカバーする範囲に貼り付けて下さい。  次に、Sheet1のC2セルに次の関数を入力して下さい。 =IF(COLUMNS($C:C)>COUNT(OFFSET(Sheet2!$1:$1,ROWS($1:2)-1,)),"",INDEX($A:$A,SMALL(OFFSET(Sheet2!$1:$1,ROWS($1:2)-1,),COLUMNS($C:C))))  次に、Sheet1のC2セルをコピーして、抽出した単語を表示させたい全てのセルに貼り付けて下さい。  以上です。

migiwanite
質問者

お礼

ありがとうございます。 試してみます。

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

こんにちは! VBAになってしまいますが・・・一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) データは2行目からあるとします。 Sub test() 'この行から Dim i, j, k As Long Dim str, buf As String For j = 2 To Cells(Rows.Count, 2).End(xlUp).Row For k = 1 To Len(Cells(j, 2)) For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row str = Mid(Cells(j, 2), k, Len(Cells(i, 1))) If str = Cells(i, 1) And Not buf Like "*" & str & "*" Then buf = buf & str & " " End If Next i Next k Cells(j, 3) = Trim(buf) buf = "" Next j Columns(3).AutoFit End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

migiwanite
質問者

お礼

ありがとうございます。 途中までうまく行ったのですが、「パターン文字列が不正です。」とダイアログが出て止まってしまいました。 おそらく、文章の中に同じ単語が出てくるとダメみたいです。

関連するQ&A

  • Excel 特定条件でのMAX値を抽出

    こんにちは。 エクセルである特定のMAX値を抽出したいのですがうまく抽出出来ません。具体的には、下のようになっています A列       B列 1       2 7       3 5       6 4       6 3       6 7       6 上のような並びがあるとして、B列の最大値を満たしている数値(この場合は複数の6)に関して、その隣のA列の数値の中で、最大になる数値(この場合は7)を抽出するような関数を作りたいのです。 そのまま読めばいいのかもしれませんが、エクセルを学びたいという気持ちもありますので、どうか分かる方は教えて下さい。

  • エクセルで特定の列だけを抽出してcsvで保存したい

    エクセルで特定の列だけを抽出してcsvで保存したい 例えば、A列:住所、B列:氏名、C列:電話番号といった3つの列がありそれぞれデータがはいっているとします(図参照)。 そしてcsvとして書き出すときにB列とC列だけを書き出したい場合どのようにすればよいでしょうか。 この場合、書き出すときにA列だけを一旦削除、などということはしたくないです。 また1列目のタイトルも書き出さないようにしたいです。 ご教授よろしくお願いいたします。

  • エクセルについての質問

     こんにちは、エクセルについて質問があります。  ご回答よろしくお願い致します。  現在エクセルに1つの列の複数のセルに文章を入力した状態にあります。  その状態で、複数のセルの文章中で重複する単語を他のセルにコピーすることはできますか?  知識がないので、やれるかどうかすらわかりません。  例  A列のA1~A100までの1つ1つのセルに文があったとして、A1の文中の単語とA3の文中の単語と A5の文中の単語が同一の場合、B列のセルに表示  表示例       A列               B列  1  魚が食べたいな       魚   2  チョコはうまい        うまい  3  焼き魚はうまい  4  泳いでいる  5  生魚はよくない  できれば、重複回数の多い順にB列に表示したいのですが、注文が多くてすみません。    説明が下手で申し訳ございません。  もし可能であれば教えていただきたいので、よろしくお願いします。  

  • エクセルで任意の複数列の単語をランダムに組み合わせる方法

    エクセルで任意の複数列の単語をランダムに組み合わせる方法 エクセルで、登録した単語をランダムに表示させ、文章をつくるようにしたい場合どうすればいいでしょうか? 例えば、単語の種類を「主語(H列)、目的語(K列)、補語(N列)、述語(Q列)」などとして、 A列にH列の単語、B列にK列の単語、C列にN列の単語、D列にQ列の単語をそれぞれランダムな順に表示して、文章を作る・・・といった風にするには、どうしたらいいでしょうか? http://questionbox.jp.msn.com/qa5488229.html ここで書かれていた例を元に、上に書いたように(それぞれHKNQ列の前2行は作業列としました)自己流でやってみたのですが、VLOOKUP関数が全然わからないし、例では1列の単語のみを対象にしてたので、やっぱり複数列を表示するには全然違う方法になるのでしょうか? また、できれば、各列、登録数が同じでなくても、大丈夫なようにする方法(少ない登録数のところは重複して単語が表示されたり)は可能なのでしょうか? エクセルもあまりわかってないのですが、ご存知の方、 どうぞよろしくお願いします。

  • excelで特定データ抽出

    EXCELでの抽出作業?を、教えて頂けませんでしょうか。  A  B 1 2安藤 D 3横山 D 4後藤 A 5岩田 C というデータ表(具体的にはシフト表)があったとします。 ここで、B列のCの者をB1に表示(この場合、岩田)したいのです。 併せて、AとCが同居する場合は、Aを優先表示(この場合、後藤)するようにしたいのです。 試行錯誤しましたが、うまくいきません。よろしくお願いします。

  • EXCELである列から複数の単語を抜き取る方法を教えてください

    excel2003を使用しています。 A B C 100 a 10 101 b 15 102 c 20 103 a 15 104 a 5 105 b 4 上記の様なデータがあり、B列の単語を基に「a」「b」のみ A列・C列も同時に違うシートに抜き出す方法はあるでしょうか? B列の単語は100程あり、抜き出す単語は30程あります。 現在はオートフィルタをかけて、一個一個抜き取っていて 非常に時間が掛かっています。 宜しくお願いします。

  • Excelで、特定のセルに入力があった場合、というようなとき

    言葉足らずのところがあれば申し訳ありません。 (1)  A1 に、なんらかの入力をした場合(文字、数字等)    A2 の値を A3にも反映する    という数式を作りたいのですが    こういうことはできるのでしょうか。    たとえば    A1 に 175R を入力した場合    A2 = A3    A1 に 「教えて!goo」 を入力した場合    A2 = A3    A1 になにも入力しない場合    A2 ≠ A3(表示なし)     もしくは    A2 ≠ A3(特定の値)     というようにしたいのですが 2  B1 に文字列を入力した場合    その文字列に、ある特定の文字が含まれている場合    B2 の値を B3に反映する ということは可能でしょうか    たとえば         B1 と C1 にそれぞれ    B1「株式会社 田中建設」 C1「第2営業部 田中さん」    と入力したときに      「田中」が含まれているから     B2 = B3   C2 = C3     もしも     B1 「鈴木ファイナンス」 C1 「フロント 大竹さん」     と入力すると     「田中」が含まれていないため     B2 ≠ B3(表示なし)     C2 ≠ C3(特定の値) と、このように表示させることは可能でしょうか。 言葉足らないところがありましたら、補足させていただきます。    

  • Excelで特定の列を見えなくする方法

    ちょっとややこしいのですが、たとえば、A1へ「8:50」(時間)と入力し、B1に「17:08」と入力したとします。その入力した数値からそれぞれC1に「9:00」D1に「17:00」を取り出します。ここまではできているのですが、実際に表示する場合は、C列とD列だけでかまわないとき、設定によって特定の列または行を表示されないようにできますか?(列・行単位でかまいません) アウトラインも試してみたのですが、この場合はダメでした。

  • Excelにて複数条件を満たす行の特定のセルの値を返す関数

    Excelにて複数条件を満たす行の特定のセルの値を返す関数を作りたいのですが、上手く行きません。 <Sheet1>   A列  B列  C列 1 2008/6/1 ★  320 2 2008/6/1 ☆  300 : : : Sheet2のA1に、「A列が2008/6/1で、B列が☆の場合、C列の値を返す」という関数を入れたいのですが、どうも上手く行きません。 良い式がありましたら教えて下さいm(_ _)m

  • エクセルで特定の文字を含むものにフラグを立てたい

    エクセル初心者です。A列に500件ランダムに(A支店、AA支店、B支店、C支店、D支店…A支店、D支店、DD支店…)と入っているデータからB列に「B支店とD支店とDD支店」にフラグ(1とか)を立てる式を教えてほしいです。いろいろ見たのですが、複数抽出の場合がわからなくて…。

専門家に質問してみよう