- ベストアンサー
エクセルで、重複した数字を1つに絞りたい
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ていうかExcelのバージョンは? 2003は「データ」→「フィルタ」→「フィルタオプションの設定」で「重複するレコードは無視する」にチェックを入れる、2007なら「データ」タブの「重複の削除」ボタン。
その他の回答 (4)
- KURUMITO
- ベストアンサー率42% (1835/4283)
数十万のデータとなれば複雑な式を使うことは計算の負担となります。作業列を使ってでも簡単な式で対応することです。 B2セルに次の式を入力します。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(B$1:B1)+1,"")) B2セルの式をコピーしてから数式バーの左側にある「名前ボックス」がB2と表示されているところをB2:B500000と入力してからEnterを押しますとそれらのセルが選択されますので右クリックして貼り付けを行います。これで式がすべてのセルにオートフィルされることになります。 次にC2セルには次の式を入力して上と同様に下方にオートフィルします。 =IF(ROW(A1)>MAX(B:B),"",INDEX(A:A,MATCH(ROW(A1),B:B,0))) C列にはお望みのデータが並ぶことになります。なお、A列でのデータは必ずしも同じデータが連続したセルにまとまって入力されている必要もありません。
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.2です。 >同じ数字が後で出てくることはありません。 というルールが厳密に守られている場合に限れば、作業列を使わずに、次の様な関数のみで、登場した順番に並べるという方法も可能となります。 まず、C1セルに次の数式を入力して下さい。 =$A$1 次に、C2セルに次の数式を入力して下さい。 =IF(OR(COUNT($A:$A)=0,C1=""),"",IF(C1=INDEX($A:$A,MATCH(MAX($A:$A)+1,$A:$A)),"",INDEX($A:$A,MATCH(C1,$A:$A,0)+COUNTIF($A:$A,C1)))) 次に、C2セルをコピーして、C2以下に貼り付けて下さい。 以上です。
- kagakusuki
- ベストアンサー率51% (2610/5101)
- kagakusuki
- ベストアンサー率51% (2610/5101)
【方法その1】作業列を使用して登場した順番に並べる方法(添付画像のC列) 今仮に、E列を作業列として使用するものとします。 まず、E1セルに次の数式を入力して下さい。 =IF(COUNTIF($A$1:INDEX($A:$A,ROW()),INDEX($A:$A,ROW()))=1,ROW(),"") 次に、E1セルをコピーして、E2以下に貼り付けて下さい。 次に、C1セルに次の数式を入力して下さい。 =IF(ROWS($1:2)>COUNT($E:$E),"",INDEX($A:$A,SMALL($E:$E,ROWS($1:2)))) 次に、C1セルをコピーして、C2以下に貼り付けて下さい。 【方法その2】作業列は使わずに、関数のみで、数値の小さい順に並べる方法(添付画像のG列) まず、G2セルに次の数式を入力して下さい。 =IF(MAX(G$1:G1)=MAX($A:$A),"",SMALL($A:$A,COUNTIF($A:$A,"<="&MAX(G$1:G1))+1)) 次に、G2セルをコピーして、G3以下に貼り付けて下さい。 【方法その3】作業列は使わずに、関数のみで、数値の大きい順に並べる方法(添付画像のI列) まず、I2セルに次の数式を入力して下さい。 =IF(COUNT(I$1:I1),IF(MIN(I$1:I1)=MIN($A:$A),"",LARGE($A:$A,COUNTIF($A:$A,">="&MIN(I$1:I1))+1)),MAX($A:$A)) 次に、I2セルをコピーして、I3以下に貼り付けて下さい。
お礼
関数を使うことばかり想定して、難しく考えていました。 他の方々も素晴らしい回答をくださいましたが、もっとも簡単な方法を提示してくださったMa-yan_bh1011さんの回答をベストアンサーにいたします。