• ベストアンサー

Excelでの照合

こんにちは。Excelで例えば、 A列     B列 8500    10000 1050    9300 5700    8500 10000    5700 9300    8500 上記のような場合、A、B両列にある数値を削除し、残りの数値のみ表示することは可能でしょうか? この場合、A列では1050が1行、B列では8500が1行だけ残るような感じです。 ちなみに、同じ行に同じ数値が入っている訳ではありません。 宜しくお願いいたします。

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

  • ベストアンサー
回答No.1

WORK作業列を作ってよいと言うのなら、 A列の照合結果をC列に、B列の照合結果をD列に作る場合は、下記のような関数で可能となるかと思います。 セルC1=IF(A1="","",IF(COUNTIF($B:$B,A1)=0,A1,IF(COUNTIF($A:$A,A1)=COUNTIF($B:$B,A1),"",IF((COUNTIF($A:$A,A1)-COUNTIF($B:$B,A1))<=0,"",IF((COUNTIF($A:$A,A1)-COUNTIF($B:$B,A1))>0,A1,""))))) セルC2=IF(A2="","",IF(COUNTIF($B:$B,A2)=0,A2,IF(COUNTIF($A:$A,A2)=COUNTIF($B:$B,A2),"",IF((COUNTIF($A:$A,A2)-COUNTIF($B:$B,A2))<=0,"",IF((COUNTIF($A:$A,A2)-COUNTIF($A$1:$A1,A2)-COUNTIF($B:$B,A2))>0,A2,""))))) セルD1=IF(B1="","",IF(COUNTIF($A:$A,B1)=0,B1,IF(COUNTIF($B:$B,B1)=COUNTIF($A:$A,A1),"",IF((COUNTIF($B:$B,B1)-COUNTIF($A:$A,B1))<=0,"",IF((COUNTIF($B:$B,B1)-COUNTIF($A:$A,B1))>0,B1,""))))) セルD2=IF(B2="","",IF(COUNTIF($A:$A,B2)=0,B2,IF(COUNTIF($B:$B,B2)=COUNTIF($A:$A,A2),"",IF((COUNTIF($B:$B,B2)-COUNTIF($A:$A,B2))<=0,"",IF((COUNTIF($B:$B,B2)-COUNTIF($B$1:$B1,B2)-COUNTIF($A:$A,B2))>0,B2,""))))) ちょっと、長くなりますが、皆が良く知っている関数を使うとこんな感じでできるとおもいます。 また、セルC3以降のC列はC2をコピーして張り付ければOKです。(D列も同様です) ちなみに、結果はこんな感じになります。 8500    10000 1050    9300     1050 5700    8500             8500 10000    5700 9300    8500 回答になってると良いのですが・・・・違ってたら、コメント残してくださいなm(_ _)m

oyaoya2006
質問者

お礼

有り難うございました!

その他の回答 (4)

  • taspon
  • ベストアンサー率69% (9/13)
回答No.5

#4です。 すみません。結果の表示が崩れてしまいました。 ただしくは以下のようになります C列  D列   E列  F列 8500:1 10000:1 1050:1 9300:1  1050 5700:1 8500:1 10000:1 5700:1 9300:1 8500:2      8500

oyaoya2006
質問者

お礼

有り難うございました!

  • taspon
  • ベストアンサー率69% (9/13)
回答No.4

「消しこみ」ということですね。 C1 =A1&":"&COUNTIF(A$1:A1,A1) D1 =B1&":"&COUNTIF(B$1:B1,B1) E1 =IF(ISNA(MATCH(C1,D:D,0)),A1,"") F1 =IF(ISNA(MATCH(D1,C:C,0)),B1,"") C列  D列   E列  F列 8500:1 10000:1 1050:1 9300:1 1050 5700:1 8500:1 10000:1 5700:1 9300:1 8500:2 8500 違っていたらすみません。 確認してみて下さい。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

'元の値が必要な場合は、コピーしておくこと Public Sub sample() Dim ListA As Range Dim ListB As Range Dim a As Long Dim b As Long Set ListA = Range("A1:A5") Set ListB = Range("B1:B5") For a = ListA.Rows.Count To 1 Step -1 b = match(Cells(a, 1).Value, ListB) If b Then Cells(a, 1).Delete (xlShiftUp) Cells(b, 2).Delete (xlShiftUp) 'ListB は、削除の度に範囲が減る End If Next End Sub Private Function match(s, r As Range) As Long Dim x As Range Dim i As Long i = 0 For Each x In r i = i + 1 If x.Value = s Then match = i: Exit Function Next match = 0 End Function

oyaoya2006
質問者

お礼

有り難うございました!

noname#204879
noname#204879
回答No.2

Fig-1    A   B  C   D   E  F 1 data  cnt tbd data  cnt tbd 2  8500  1  x  10000  1  x 3  1050  1  x  9300  1  x 4  5700  1  x  8500  1  x 5 10000  1  x  5700  1  x 6  9300  1  x  8500  2  x B2: =COUNTIF(A$2:A2,A2) E2: =COUNTIF(D$2:D2,D2) C、Eの各セルとセル C9 に文字列 x を入力しておく 1.[フィルタオプションの設定]を実行 2.[リスト範囲] $A$1:$B$6   [検索条件範囲] $D$1:$E$6   [抽出先]の“選択範囲内”に目玉入れ 3.[OK]をクリックした結果を Fig-2 に示す。 Fig-2    A   B  C   D   E  F 1 data  cnt tbd data  cnt tbd 2  8500  1  x  10000  1  x 4  5700  1  x  8500  1  x 5 10000  1  x  5700  1  x 6  9300  1  x  8500  2  x 4.C列の可視セルを d で上書き 5.[データ]→[フィルタ]→[すべて表示]を実行 6.ステップ1、2に同じ。ただし、次のように読み替え   [リスト範囲] $D$1:$E$6   [検索条件範囲] $A$1:$B$6 7.[OK]をクリックした結果を Fig-3 に示す。 Fig-3    A   B  C   D   E  F 1 data  cnt tbd data  cnt tbd 2  8500  1  d  10000  1  x 3  1050  1  x  9300  1  x 4  5700  1  d  8500  1  x 5 10000  1  d  5700  1  x 8.F列の可視セルに d を入力 5.[データ]→[フィルタ]→[すべて表示]を実行を Fig-4 に示す。 Fig-4    A   B  C   D   E  F 1 data  cnt tbd data  cnt tbd 2  8500  1  d  10000  1  d 3  1050  1  x  9300  1  d 4  5700  1  d  8500  1  d 5 10000  1  d  5700  1  d 6  9300  1  d  8500  2  x 6.セル A8、D8 に文字列 data を入力   セル C8 に文字列 tbd を入力   セル C9 に文字列 x を入力 7.[フィルタオプションの設定]を実行 8.[リスト範囲] $A$1:$C$6   [検索条件範囲] $C$8:$C$9   [抽出先]の“指定した範囲”に目玉入れ   [抽出範囲] $A$8   とそれぞれ設定した後で[OK]をクリック 9.ステップ8に同じ。ただし、次のように読み替え   [リスト範囲] $D$1:$F$6   [抽出範囲] $D$8 以上のステップを試してみて、疑義があればその旨を書き込んでください。

oyaoya2006
質問者

お礼

有り難うございました!