• ベストアンサー

2つのリストの差集合を出したい

添付画像にあるように、B列とC列に単語のリストがあります。 B列とC列の差集合をE列に表示させたいと思っています。 なお、A列はB列の単語の頻度で、その数値をD列にも残したいです。 ちなみに、 =INDEX(A:A,SMALL(IF(COUNTIF(B:B,A$1:A$100),9999,ROW(A$1:A$100)),ROW(C1)))&"" というやり方でやっていたのですが、時間とマシンパワーを必要とするため、別の方法があったら、ぜひ教えていただきたいと思っています。 どうぞよろしくお願いしますm_ _m

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

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

こんにちは! >時間とマシンパワーを必要とするため・・・ とありますのでVBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) 尚、データは1行目からあるとしています。 Sub test() 'この行から Dim i, k As Long Application.ScreenUpdating = False For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Columns(3), Cells(i, 2)) = 0 Then k = k + 1 With Cells(k, 4) .Value = Cells(i, 1) .Offset(, 1) = Cells(i, 2) End With End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。 お望みの方法でなかったらごめんなさいね。m(_ _)m

junpei12
質問者

お礼

試してみたところ、とても短時間で処理することが出来ました。とても助かります。どうもありがとうございました。

その他の回答 (3)

回答No.3

No.2です。ごめんなさい、No.2で、数式中の数字を間違えました(行を削除した後の式を貼ってしまいました)。正しくは次の式です。 =countif($C$7:$C$10,b1)=0

junpei12
質問者

お礼

どうもありがとうございました。 ベストアンサーとさせて頂くか迷ったのですが、申し訳ありません。 教えていただいた式でも可能であることを確認しました。 色々な方法があることも分かって、とても勉強になりました。 ありがとうございました。

回答No.2

一発で算出しなくてもいいなら、該当/非該当を表示する作業列を作り、非該当の行だけ削除するのが簡単かと。 D・E列に何も入力されていないものとして話を進めます。 (1)A1:B4とC1:C4の行番号が重ならないよう、C1:C4をワークシート内のよその行か、別シートに移動。今回はC7:C10に移したとする。 (2)新しく空白セルとなったC1セルに次式を入力。 =countif($C$5:$C$8,b1)=0 (3)オートフィルでC1:C4を埋める。計算結果として「TRUE」か「FALSE」が表示される。 (4)C1:C4をコピーし、D1:D4に値のみ貼り付け。 (5)D1:D4を選択した状態で、置換の機能(Ctrl+H)により、「false」→「」(未入力)の置換を実行。 (6)D1:D4を選択した状態で、ジャンプのダイアログ(Ctrl+G)を開き、「セル選択」ボタンの中の「空白セル」を指定して「OK」ボタンを押下。 (7)空白セルのみ選択された状態となっているので、削除のダイアログ(Ctrl+ -(マイナス))で、「行全体」を指定して「OK」ボタンを押下。

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

>時間とマシンパワーを必要とするため、別の方法があったら、ぜひ教えていただきたい 今の「その」配列数式で限界を感じているなら、多少の手入れをしてもどのみち劇的な改善はありません。 素直に D1: =IF(COUNTIF(C:C,B1),"",ROW(D1)) 以下コピー F1: =IFERROR(INDEX(A:A,SMALL(D:D,ROW(F1))),"") G1: =IFERROR(INDEX(B:B,SMALL(D:D,ROW(G1))),"") 以下コピー などのようにしてしまえば、ほとんどストレスなしに結果を得られるはずです。

junpei12
質問者

お礼

どうもありがとうございました。 ベストアンサーとさせて頂くか迷ったのですが、申し訳ありません。 色々な方法があることも分かって、とても勉強になりました。 大変感謝しております。

関連するQ&A

専門家に質問してみよう