• ベストアンサー

Excelで一致しない数字を返し、一箇所にまとめるには?

以前も似たような質問したのですが、よくわからなくなってしまったのでまたお願いします。 A列 B列 C列 1052 1052 1033 1230 1033 1044 1335 1044 1560 1335 1650 1650 このように、「A列とB列を比較して、A列にない数字を、C列に上から順に揃えて抽出する」にはどのようにすればよいのでしょうか? 文字列は300行位になります。 バージョンは2002です。 VBはよくわからないので、簡単にできる方法があれば幸いです。

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

  • ベストアンサー
  • comv
  • ベストアンサー率52% (322/612)
回答No.1

こんばんは フィルタオプションでの操作例です データ範囲がA1:B300まであるとして   A列 B列 C列 D列 1 data1 data2 data2 2 1052 1052     式 3 1230 1033 4 1335 1044 5 1560 1335 6 1650 1650 :  : : 300  : : 式 セルD2に =COUNTIF($A$2:$A$300,B2)=0 ・1行目に適当な項目名を記載  C1(抽出場所に抽出対象:B列 と同様の項目名を記載 ・A1:B300までを選択 ・メニューのデータ フィルタ フィルタオプション  抽出先 指定した範囲 にチェク  リスト範囲 $A$1:$B$300  検索条件範囲 $D$1:$D$2 ←D1は空白 D2が条件数式  抽出範囲 $C$1 で試してみて下さい

gilfffo
質問者

お礼

おおおお!すばらしい!できました。 上手にいきました。ありがとうございます!!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

C1に=IF(ISERROR(MATCH(B1,$A$1:$A$310,0)),B1,"") D1に=IF(ISERROR(MATCH(B1,$A$1:$A$310,0)),ROW(),"") をいれB列最下行まで複写。A列データを310行と仮定。 B1:CXX(XXはB列最下行)を値のみ複写で値にする。 B1:CXXをD列で並べ替えする。 (サンプル)A1:B8。式は =IF(ISERROR(MATCH(B1,$A$1:$A$8,0)),B1,"") =IF(ISERROR(MATCH(B1,$A$1:$A$8,0)),ROW(),"") 1055 1033 1068 1053 1078 1078 1088 1099 1099 2000 2011 2002 2012 2011 2020 2013 (結果)C1:D5 1033 1 1053 2 2000 5 2002 6 2013 8 D列は消す。

回答No.2

以前の質問の時に、どのような回答を頂いたのか分かりませんので、 重複していたらすみません。 頑張って書いてる内に#1さんの回答が入っていたので、 必要なければ、読み飛ばしてください。 (やばいなー 読み飛ばされそう!) でも、頑張って書いたので見れたら見てね。 一応、思いつくのを3つ挙げてみました。 何を持って簡単とするかは、gilfffoさん次第ですが、 お勧めは、VBAです。(早い!)私の回答の中ではです。 VBはよくわからないようですが、一応VBAの方法も記述しましたので、他と比べてみてください。 1.手動にて(面倒!)さらに#1さんの方が簡単そう!   (1)C1セルに     =IF(COUNTIF($A$1:$A$300,B1)=0,B1,"")     と入力しC300セルまでコピー   (2)C列全体をコピーし、C列に値のみ貼り付け   (3)「データ」→「並べ替え」で値を並べ替える 2.関数にて(必要行が増えると再計算に時間が掛かる!)   (1)C1セルに     =IF(SUM(IF((COUNTIF($A$1:$A$300,$B$1:$B$300)=0)*($B$1:$B$300),1,0))<ROW(A1),"",INDEX($B$1:$B$300,SMALL(IF(COUNTIF($A$1:$A$300,$B$1:$B$300)=0,ROW($B$1:$B$300),""),ROW(A1)),))     と入力し、[Enter]の代わりに[Ctrl]+[Shift]+[Enter]を押す   (2)必要行までコピー 3.VBAにて(若干の知識が必要!)   (1)[Alt]+[F11]でVisial Basic Editerに移動する。   (2)「挿入」→「標準モジュール」でモジュールを追加する。   (3)右上の広い場所([General]と書いてある下)に      以下のコードを貼り付ける。      '----------この下から-------- Sub test()   With Worksheets("Sheet1")     .Range("c:c").ClearContents     tbl = .Range("A1:C300").Value          cnt = 0     For i = 1 To UBound(tbl, 1)       If (tbl(i, 2) <> "") Then         flg = False         For j = 1 To UBound(tbl, 1)           If (tbl(j, 1) = tbl(i, 2)) Then             flg = True             Exit For           End If         Next j         If (flg = False) Then           cnt = cnt + 1           tbl(cnt, 3) = tbl(i, 2)         End If       End If     Next i     .Range("A1:C300").Value = tbl   End With End Sub      '----------この上まで--------   (4)[Alt]+[F11]でEXCELに戻る   (5)「ツール」→「マクロ」→「マクロ」      から[Test]を選択して実行   (「フォーム」のツールバーからボタンを選択してマクロを登録してもよい。) 分からない所やおかしい所があれば、補足してください。 長文失礼しました。

関連するQ&A