- ベストアンサー
Excelでの照合
こんにちは。Excelで例えば、 A列 B列 8500 10000 1050 9300 5700 8500 10000 5700 9300 8500 上記のような場合、A、B両列にある数値を削除し、残りの数値のみ表示することは可能でしょうか? この場合、A列では1050が1行、B列では8500が1行だけ残るような感じです。 ちなみに、同じ行に同じ数値が入っている訳ではありません。 宜しくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (4)
- taspon
- ベストアンサー率69% (9/13)
#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
お礼
有り難うございました!
- taspon
- ベストアンサー率69% (9/13)
「消しこみ」ということですね。 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)
'元の値が必要な場合は、コピーしておくこと 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
お礼
有り難うございました!
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 以上のステップを試してみて、疑義があればその旨を書き込んでください。
お礼
有り難うございました!
お礼
有り難うございました!