• ベストアンサー

B列とC列の両方に存在する単語を抽出したい

エクセルで、添付画像のように、「A列に頻度、B列に単語」が書かれています。 B列とC列の両方にある単語を抽出して、「E列に単語を、D列にその単語の頻度(A列の情報)」を書き出したいと思っています。 良い方法をご存知のかた、教えていただけますでしょうか?m_ _m

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

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

こんにちは! 余計なお世話かもしれませんが・・・ 画像を拝見する限りでは単語すべてを検索といった感じなのですかね? すなわちZまであるとかなりのデータ量になると思います。 そこでVBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, k As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Columns(3), Cells(i, 2)) Then k = k + 1 With Cells(k, 4) .Value = Cells(i, 1) .Offset(, 1) = Cells(i, 2) End With End If Next i End Sub 'この行まで お望みの方法でなかったらごめんなさいね。m(_ _)m

junpei12
質問者

お礼

ご回答いただき、ありがとうございます。 VBA、実行してみたところ、D列とE列に正しく表示されました! お察し頂いたように、A列とB列には大量のデータが入っています。 とても助かりました。どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • WasaBeam
  • ベストアンサー率33% (1/3)
回答No.4

VBAを使った方法です(Excel2010で検証) B列の単語ごとにC列で検索を行い、一致するものがあれば A列の情報をD列に、B列の情報をE列にセットしています。 Option Explicit Sub SampleProcedure() Dim oRows1 As Range Dim oRows2 As Range Dim bFind As Boolean Dim iRow As Integer iRow = 1 For Each oRows1 In ActiveSheet.Columns(2).Rows If oRows1.Text = "" Then Exit For bFind = False For Each oRows2 In ActiveSheet.Columns(3).Rows If oRows1.Text = oRows2.Text Then bFind = True Exit For ElseIf oRows2.Text = "" Then Exit For End If Next If bFind Then With ActiveSheet.Rows(iRow) .Columns(4).Value = oRows1.Columns(0).Text .Columns(5).Value = oRows1.Text End With iRow = iRow + 1 End If Next End Sub

junpei12
質問者

お礼

ご回答いただき、ありがとうございます。 せっかくご回答いただいたのに申し訳ありませんが、 つい先ほど、ベストアンサーを選んでしまいました。 同じことを実現するために、いくつもの方法があることが分かり、勉強になりました。どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#204879
noname#204879
回答No.3

添付図参照

junpei12
質問者

お礼

ご回答いただき、ありがとうございました。 教えていただいたフィルタの方法でやってみたのですが、なぜか途中からD列とE列に、C列にはないデータが混じるようになってしまいました。 何か私のやり方が間違っているんだと思います。 いずれにしましても、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

作業列を作って対応するのがよいでしょう。 A列からE列までには1行目に項目名が有り、2行目から下方にデータが有るとします。 F2セルには次の式を入力して下方にドラッグコピーします。 =IF(C2="","",IF(COUNTIF(B:B,C2)>0,MAX(F$1:F1)+1,"")) D2セルには次の式を入力してE2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX($F:$F),"",INDEX($A:$B,MATCH(ROW(A1),$F:$F,0),COLUMN(A1)))

junpei12
質問者

補足

早速のご回答、ありがとうございます。 上記の通りやってみたのですが、D列とE列には、A列とB列のデータがコピーされた結果となります。。。 C列にある単語だけを抜き出したいのですが、何か私のやり方が間違っているのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • A列にあってB列にはない単語をC列に残したいです。

    エクセルで、「A列とB列にそれぞれ単語がたくさん入力されています。A列にはあるが、B列にはない単語を抽出して、C列に残す」ということをやりたいのですが、どなたか関数を教えていただけないでしょうか? すみませんが、エクセルの関数を教えていただけないでしょうか。 単語のリストが2つあります。 A列に、片方のリストを入れ、B列にもう片方のリストを入力してあります。 ■やりたいこと 1: 2つのリストには重複している単語があるため、重複している単語は削除して、A列だけに存在する単語をC列に入れたいと思っています。 ■やりたいこと 2: 最終的には、C列には、空のセルを作らず、上のほうの行に詰めた形に整えたいと思っております。 以上の2つについて、どちらかだけでもやり方を教えていただければ、大変助かります。 どうぞよろしくお願いします。

  • エクセルのA列とB列で重複するレコードのみを抽出して別の列に表示させた

    エクセルのA列とB列で重複するレコードのみを抽出して別の列に表示させたい。 エクセルのA列に約1,000行くらいのデータが有ります。 このA列内で重複レコードがあります。 B列に約1,000行くらいのデータが有ります。 B列内でも重複レコードが有ります。 この条件の中で (1)A列にもB列にあるデータすべて (2)A列にしかないデータすべて (3)B列にしかないデータすべて を抽出したいのですが、どんな方法がありますか? それで (1)をC列 (2)をD列 (3)をE列 に並べて表示させたいです。 さらに抽出されたデータで重複レコードの場合は1件のみで表示したいです。 複数の操作を繰り返すのではなく C,D,E列に式を入れるだけで済ませる事は可能でしょうか? よろしくお願いします。 例    A   B    C   D   E 1-001-002--001--004--007 2-002-002--002--006--008 3-001-001--005--010 4-005-007 5-001-005 6-004-005 7-004-008 8-010-007 9-006-007 A列には001が3個、002が1個、005が1個有ります。 B列には001が1個、002が2個、005が2個有ります。 A列にもB列にも有るのは、001と002と005ですから これがC列に表示されます。 でそれぞれA列にもB列にも複数有りますが、1個として判定なので よって、C列には 001 001 001 001 002 002 005 005 と表示ではなく 001 002 005 と表示したい。 次にD列はA列に有る物だけですから 004 006 010 となります。B列には004は2個有りますが同じ値なので 004 004 006 010 では無く004は1個の表示です。 E列はB列のみのデータなので 007 008 です。 同じくB列には007が3個有りますが1個ともなします。 007 007 007 008 では無く 007 008 です。

  • エクセルでB列とC列で重複する語の頻度数合計

    エクセルの処理の質問です。 2つの単語リストがあり、下記のように、B列とC列に入力してあります。 A列は、B列の単語リストの頻度です。 ------------------ A列 B列 C列 D列 4 and and 3 be the 5 stay type 4 the zoo ------------------ やりたいことは、 上記、B列とC列で重複している単語を見つけて その重複語の頻度数(A列)を合計して、D1のセルに入力したいと思っています。 上記の例の場合、D1には 8 が入ることになります。 このようなことは可能でしょうか。 やり方をご存知の方、教えていただけると大変たすかります。 よろしくお願いします。

  • 番号が一致したら別の列の値を抽出したい

    こんばんわ。 Excelについて教えてください。 A列に数字が1~10と並んでおり、 C列には数字が穴あきで5つ(1,2,4,6,8)あったとし、 A列とC列を比較して比較し、数字が重複した場合は、 D列にある値をB列に抽出したいのですが、行番号を指定して 抽出する事なんてできますでしょうか? ↓こんな事をしたいです。 A列 B列 C列 D列 1  A  1  A 2  B  2  B 3     4  C 4  C  6  D 5     8  E 6  D 7 8  E 9 10

  • エクセルで 任意の単語を重複なしで抽出したい

    エクセルに入力した単語の行 ※(例えば G行2列から G行101列までの100個) の中から 5つの単語をランダムに出力したい  ※(例えば A2 B2 C2 D2 E2 へ) ・ここで おなじ列の中では 単語の重複を避けたい ・出力は A2 B2 C2 D2 E2  、 A3 B3 C3 D3 E3、、、、、、、、、、  と、任意の量にふやしたい エクセルにまだ詳しくないので、少し優しめに解答もらえると嬉しいです よろしくお願いします    

  • Excelで、A列に「ある特定のキーワード」が入っていたら、それをB列に抽出したい

    タイトルの通りなのですが、具体的な例を以下に記載します。 A列には、3行~5行からなるアンケートに対する回答がテキストとして存在している。 このテキストの中に「ありがとう」という文字列が存在した場合、B列に「1」と入力されるようにしたい。 やりたいこととしては、単純にこれだけです。 で、ここからさらに「複数のキーワードを抽出したい」というのが今回の質問です。 A列に以下のテキストデータがあるとします。 ---------------------------------------------------------- いつも親切にしてくれてありがとう。 近いうちに、私からあたなに対してお礼をしたいと思います。 よかったら食事にでも行きましょう。 ---------------------------------------------------------- この中から「ありがとう」「親切」「お礼」「食事」というキーワードを 拾い、B列、C列、D列、E列にそれぞれ「1」と反映されるようにしたい。 イメージ画像を添付したので、そちらを見ていただければと思います。 イメージ画像はすべて手動で入力した結果ですが、これを自動で行いたいと思っています。 画像でいうと、C列にテキストデータをペーストしたら、自動的にD、E、F、G列に「1」という数字が入るようにしたいです。 エクセル2003を使っています。 どうか、よいアドバイスをいただければと思います。

  • 巨大なCSVの加工(指定列のみの抽出)について

    巨大なCSVの加工(指定列のみの抽出)について 下記のような構成のCSVファイルがあります。 "ID","a","b","c","d","e","f","g","h","i","j","k","l","m" "0001","a","b","c","d","e","f","g","h","i","j","k","l","m" "0003","a","b","c","d","e","f","g","h","i","j","k","l","m" "0004","a","b","c","d","e","f","g","h","i","j","k","l","m" ・ ・ ・ 例えば、 ここから"ID"列と"c"列と"f"列のみ抽出して新たなCSVファイルで保存。 という処理を行いたいのですが、行数が5000万行近くあり、ファイルサイズが80GB程あるので エクセルはおろかアクセスでも開くことができません。 テキストエディタの秀丸64bit版なら開くことができますが、指定列の抽出方法が分かりません。 秀丸のマクロでもVBSでも良く、また膨大な待ち時間がかかっても構わないので実現する方法について お知恵をお貸しください。

  • エクセルでA列-B列=C列 の抽出方法について

    エクセルの初歩的な質問になってしまうかもしれませんが A列の値からB列の値で重複する値を削除して C列を作る方法を教えてください。 A列 a b c d B列 c d から 結果 C列 a b のような結果が得られる処理方法を お願い致します。

  • エクセルでA列、B列、C列、D列、E列に数値が入力されており、それぞれ

    エクセルでA列、B列、C列、D列、E列に数値が入力されており、それぞれの数値が重複しないように合計数値を計算したいのですが、何か良い方法は無いでしょうか? 例 A B C D E 1 5 12 6 13 13 2 7 13 7 14 14 3 16 8 20 5+12+6+13+13=49 5+12+7+13+13=50 よろしくお願いします

  • 列中に共通にあるデータを抽出したい

    エクセルでA列、B列、C列と別々の文字情報が入っているデータがあります(製品のコードNo),列は条件で分類しています(例,列A: 水をかけて変質したもの、列B: 燃えたもの, など.数値の数は列ごとに異なります). 列Aと列Bの両方で出てきたもの列Aと列Cで出てきたけれど列Bにはないもの、というような抽出を行なうにはどうしたらよいのでしょうか.うまく検索式を組む事が出来ません.よろしくお願い致します.

専門家に質問してみよう