- ベストアンサー
Excelで一致しない数字を返し、一箇所にまとめるには?
以前も似たような質問したのですが、よくわからなくなってしまったのでまたお願いします。 A列 B列 C列 1052 1052 1033 1230 1033 1044 1335 1044 1560 1335 1650 1650 このように、「A列とB列を比較して、A列にない数字を、C列に上から順に揃えて抽出する」にはどのようにすればよいのでしょうか? 文字列は300行位になります。 バージョンは2002です。 VBはよくわからないので、簡単にできる方法があれば幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは フィルタオプションでの操作例です データ範囲が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 で試してみて下さい
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
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列は消す。
- taisuke555
- ベストアンサー率55% (132/236)
以前の質問の時に、どのような回答を頂いたのか分かりませんので、 重複していたらすみません。 頑張って書いてる内に#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]を選択して実行 (「フォーム」のツールバーからボタンを選択してマクロを登録してもよい。) 分からない所やおかしい所があれば、補足してください。 長文失礼しました。
お礼
おおおお!すばらしい!できました。 上手にいきました。ありがとうございます!!