• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでA列B列C列の重複するレコードのみを表示)

エクセルでA列B列C列の重複するレコードのみを表示

このQ&Aのポイント
  • エクセルのA列とB列とC列で重複するレコードのみを抽出して別の列に表示させたい。
  • A列とB列とC列にそれぞれ1000行くらいのデータがあります。それぞれの列内には重複レコードがあります。
  • 「A列とB列とC列に重複するデータすべて」を抽出したいのですが、どんな方法がありますか。抽出されたデータで重複レコードの場合は1件のみで表示したいです。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

式が複雑になるということはそれだけ分かりにくく、計算が重くなるということです。出来るだけ作業列を使ってわかりやすく処理することが肝要と考えます。 例えばA,B,C列の2行目からお示しのようなデータがあるとします。 D2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(COUNTIF(A$2:A2,A2)=1,COUNTIF(B:B,A2)>0,COUNTIF(C:C,A2)>0),MAX(D$1:D1)+1,"") D列にはA,B,C列に共通して含まれるデータがあれば上から順に番号が付けられます。その際にもしもA列でダブったデータがある場合には最初に出てきたデータに番号が振られます。 お求めのデータはE列に並べるとしてE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(D:D),"",INDEX(A:A,MATCH(ROW(A1),D:D,0))) D列が目障りでしたら列を非表示にすればよいでしょう。

dipsy02
質問者

お礼

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

その他の回答 (7)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.8

毎度なのだが、 慣れない関数使わなくてもできる。 A列の値 B列の値 C列の値 こうして1つの列に固めてしてしまえば、同じ数値3行続いてあればABCに存在と判断できる。 B列ではA列にあればマークし、C列ではB列にマークあればさらにマークする。 質問なんかするよりちょっと考えて工夫したらできるのでないか。 長い数式を考えるより悩まなくて済むし自分で出来ることが何よりの収穫。 長い数式は理解しないと保守できない。シンプルであるべき。数式にこだわる必要もない。

dipsy02
質問者

お礼

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

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

回答が多数出てから言うのもなんだが、質問の意味が判りにくい? 言い直してみれば、 「各行のA,B、C列で、A=B列、B=C列、A=C列または3列等しい行について、その等しい値を抜き出す。 ただし前に抜き出した値は2度目から表示しない。」 こんなことかな? ーー 関数では相当複雑になるので VBAで標準モジュールに Sub test01() d = Range("A65536").End(xlUp).Row '最終行 ' MsgBox d Dim l(100) Dim p '配列のポインタ p = 1 For i = 1 To d A = Cells(i, "A"): B = Cells(i, "B"): C = Cells(i, "C") If A = B Then x = A ElseIf B = C Then x = B ElseIf C = A Then x = C End If 'MsgBox x '重複あるかチェック For j = 1 To p If x = l(j) Then GoTo p1 '同じもの既に有り Next j l(p) = x p = p + 1 p1: Next i '--セルに結果セット F列に For j = 1 To p - 1 Cells(j, "F") = l(j) Next j End Sub 重複ペアーは上記では100個までにしているがDim l(100)を見込みで適宜変更。 データ例 F列が結果 質問データの場合結果E列 A列  B列  C列       E列  F列 1 2 2 2 2 2 2 5 7 7 3 7 7 8 8 7 8 8 11 11 8 8 10 13 8 10 11 4 11 11 12 13 13 13 4 1 4

dipsy02
質問者

お礼

ありがとうございます。 質問の仕方が悪かったです。すみませんでした。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.5

◆関数でならば、 【EXCEL2007以降】 D1=IFERROR(INDEX($A$1:$A$9,SMALL(INDEX((FREQUENCY($A$1:$A$8,$A$1:$A$8)*COUNTIF($B$1:$B$8,$A$1:$A$9)*COUNTIF($C$1:$C$8,$A$1:$A$9)=0)*10^5+ROW($A$1:$A$9),),ROW(A1))),"") ★下にコピー 【EXCEL2003以前】 D1=IF(ROW(A1)>SUMPRODUCT((FREQUENCY($A$1:$A$8,$A$1:$A$8)*COUNTIF($B$1:$B$8,$A$1:$A$9)*COUNTIF($C$1:$C$8,$A$1:$A$9)>0)*1),"",SMALL(INDEX((FREQUENCY($A$1:$A$8,$A$1:$A$8)*COUNTIF($B$1:$B$8,$A$1:$A$9)*COUNTIF($C$1:$C$8,$A$1:$A$9)=0)*10^5+$A$1:$A$9,),ROW(A1))) ★下にコピー

dipsy02
質問者

お礼

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

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

質問文から判断して私の提示した数式はA列とC列が同じ場合もヒットするようにしましたが、例示のデータでは8行目の「013」が抽出されていませんね。 もしこの条件が必要ないなら、B列のデータだけ比較することになるので、以下のようにはるかに簡単な数式になります。 =INDEX(B:B,SMALL(INDEX((($A$2:$A$1000<>$B$2:$B$1000)*($B$2:$B$1000<>$C$2:$C$1000)*1000+ROW($A$2:$A$1000)),),ROW(A1)))&""

dipsy02
質問者

お礼

ありがとうございました! 質問分かりにくくてすみませんした。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

表示データ数が多いと実用的ではありませんが、数式だけで表示する例です。 例えば2行目からデータがあるなら、以下の式を入力して下方向にオートフィルしてください。 =IF(INDEX(A:A,SMALL(INDEX((($A$2:$A$1000<>$B$2:$B$1000)*($B$2:$B$1000<>$C$2:$C$1000)*($A$2:$A$1000<>$C$2:$C$1000)*1000+ROW($A$2:$A$1000)),),ROW(A1)))=INDEX(B:B,SMALL(INDEX((($A$2:$A$1000<>$B$2:$B$1000)*($B$2:$B$1000<>$C$2:$C$1000)*($A$2:$A$1000<>$C$2:$C$1000)*1000+ROW($A$2:$A$1000)),),ROW(A1))),INDEX(A:A,SMALL(INDEX((($A$2:$A$1000<>$B$2:$B$1000)*($B$2:$B$1000<>$C$2:$C$1000)*($A$2:$A$1000<>$C$2:$C$1000)*1000+ROW($A$2:$A$1000)),),ROW(A1))),INDEX(C:C,SMALL(INDEX((($A$2:$A$1000<>$B$2:$B$1000)*($B$2:$B$1000<>$C$2:$C$1000)*($A$2:$A$1000<>$C$2:$C$1000)*1000+ROW($A$2:$A$1000)),),ROW(A1))))&""

noname#204879
noname#204879
回答No.2

[フィルタオプションの設定]による方法(添付図参照) E2: =(COUNTIF(B$2:B$9,A2)>0)*(COUNTIF(C$2:C$9,A2)>0) [抽出先]    → “指定した範囲” [リスト範囲  → $A$1:$A$9 [検索条件範囲] → $E$1:$E$2 [抽出範囲]   → $D$1 “重複するレコードは無視する”にチェック入れ

dipsy02
質問者

お礼

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

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例です。 ↓の画像のように作業用の列を設けています。 (数値だけでなく、文字列の場合も対応できるようにしてみました) 作業列D2セルに =IF(AND(COUNTIF($A$2:A2,A2)=1,COUNTIF(B:B,A2),COUNTIF(C:C,A2)),ROW(),"") という数式を入れ、オートフィルでずぃ~~~!っと下へコピー! 結果のF2セルに =IF(COUNT(D:D)<ROW(A1),"",INDEX(A:A,SMALL(D:D,ROW(A1)))) という数式を入れ、オートフィルで下へコピーすると画像のような感じになります。 参考になれ良いのですが・・・m(__)m

dipsy02
質問者

お礼

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

関連するQ&A