アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのA列とB列とC列で重複するレコードのみを抽出して別の列に表示させたい。

エクセルのA列とB列とC列にそれぞれ1000行くらいのデータがあります。
それぞれの列内には重複レコードがあります。

この条件の中で

「A列とB列とC列に重複するデータすべて」

を抽出したいのですが、どんな方法がありますか。
抽出されたデータで重複レコードの場合は1件のみで表示したいです。

よろしくお願いします。


  A   B   C   抽出 
1-001-002--002--002
2-002-002--005--007
3-003-007--007--008
4-007-008--008--011
5-008-008--010
6-008-010--011
7-011-011--012
8-013-014--013

A 回答 (8件)

式が複雑になるということはそれだけ分かりにくく、計算が重くなるということです。

出来るだけ作業列を使ってわかりやすく処理することが肝要と考えます。
例えば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列が目障りでしたら列を非表示にすればよいでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/02/26 11:32

毎度なのだが、


慣れない関数使わなくてもできる。

A列の値
B列の値
C列の値
こうして1つの列に固めてしてしまえば、同じ数値3行続いてあればABCに存在と判断できる。

B列ではA列にあればマークし、C列ではB列にマークあればさらにマークする。

質問なんかするよりちょっと考えて工夫したらできるのでないか。

長い数式を考えるより悩まなくて済むし自分で出来ることが何よりの収穫。
長い数式は理解しないと保守できない。シンプルであるべき。数式にこだわる必要もない。
    • good
    • 2
この回答へのお礼

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

お礼日時:2011/02/26 11:34

回答が多数出てから言うのもなんだが、質問の意味が判りにくい?


言い直してみれば、
「各行の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列
12222
22577
37788
7881111
881013
810114
111112
131313
414
    • good
    • 0
この回答へのお礼

ありがとうございます。

質問の仕方が悪かったです。すみませんでした。

お礼日時:2011/02/26 11:35

◆関数でならば、


【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)))
★下にコピー
「エクセルでA列B列C列の重複するレコード」の回答画像5
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/02/26 11:35

質問文から判断して私の提示した数式は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)))&""
    • good
    • 0
この回答へのお礼

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

質問分かりにくくてすみませんした。

お礼日時:2011/02/26 11:36

表示データ数が多いと実用的ではありませんが、数式だけで表示する例です。



例えば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))))&""
    • good
    • 0

[フィルタオプションの設定]による方法(添付図参照)



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
“重複するレコードは無視する”にチェック入れ
「エクセルでA列B列C列の重複するレコード」の回答画像2
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/02/26 11:36

こんばんは!


一例です。

↓の画像のように作業用の列を設けています。
(数値だけでなく、文字列の場合も対応できるようにしてみました)

作業列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
「エクセルでA列B列C列の重複するレコード」の回答画像1
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/02/26 11:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A