dポイントプレゼントキャンペーン実施中!

添付画像にあるように、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

「2つのリストの差集合を出したい」の質問画像

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/06 21:37

No.2です。

ごめんなさい、No.2で、数式中の数字を間違えました(行を削除した後の式を貼ってしまいました)。正しくは次の式です。

=countif($C$7:$C$10,b1)=0
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

ベストアンサーとさせて頂くか迷ったのですが、申し訳ありません。

教えていただいた式でも可能であることを確認しました。
色々な方法があることも分かって、とても勉強になりました。

ありがとうございました。

お礼日時:2012/05/06 21:39

一発で算出しなくてもいいなら、該当/非該当を表示する作業列を作り、非該当の行だけ削除するのが簡単かと。




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」ボタンを押下。
    • good
    • 0

>時間とマシンパワーを必要とするため、別の方法があったら、ぜひ教えていただきたい



今の「その」配列数式で限界を感じているなら、多少の手入れをしてもどのみち劇的な改善はありません。


素直に
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))),"")
以下コピー

などのようにしてしまえば、ほとんどストレスなしに結果を得られるはずです。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

ベストアンサーとさせて頂くか迷ったのですが、申し訳ありません。

色々な方法があることも分かって、とても勉強になりました。

大変感謝しております。

お礼日時:2012/05/06 21:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A