- ベストアンサー
エクセル関数での重複削除
以下のようなエクセル表があったとします。 【列A】 【列B】 【行1】 1 A社 【行2】 2 B社 【行3】 3 B社 【行4】 4 C社 【行5】 5 C社 【行6】 6 C社 この表の下のほうに、【列B】の社名を重複を削除した形で一覧表示させたいのです。この例の場合ですと、 A社 B社 C社 と表示させたいのですが。。。 フィルタ機能を使って重複を削除すれば同じようなことができるのですが、今後の更新作業を楽にするため関数でやりたいのですが、可能でしょうか。 教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>可能でしょうか やって出来ないことは勿論ありません。でも使いやすくもありません。 =INDEX(B:B,SMALL(IF(MATCH($B$1:$B$100&"",$B$1:$B$100&"",0)=ROW($B$1:$B$100),ROW($B$1:$B$100),9999),MIN(COUNTA(B:B)+1,ROW(B1))))&"" と記入してコントロールキーとシフトキーを押しながらEnterで入力する。など。 >今後の更新作業を楽にするため関数でやりたいのですが その場限りのブラックボックスでよいのなら,という事ですね。
その他の回答 (5)
- Nouble
- ベストアンサー率18% (330/1783)
つい数日前に私が同じような問題(重複の解消)に突き当たり 探されている内容に対する回答を頂きましたので (※:ナンバー3 MackyNo1様の回答です) アドレスを開示しておきます この情報がお役に立てたなら幸いです
お礼
ご回答ありがとうございます。 今回は別の方が作業列を作らずにできる方法を投稿してくださったのでそちらを利用するこにしました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、元データが1~100行目にかけて入力されていて、B110~B209に一覧表示を行い、C列を作業列として使用するものとします。 まず、C1セルに =IF($B1="","",1) という数式を入力し、次にC2セルに =IF(COUNTIF($B$1:$B2,$B2)=1,COUNT(C$1:C1)+1,"") という数式を入力して下さい。 そして、C2セルをコピーして、C3~C100セルに貼り付けて下さい。 それから、B110セルに =IF(ROWS(B$110:B110)>MAX($C$1:$C$100),"",INDEX($B$1:$B$100),MATCH(ROWS(B$110:B110),$C$1:$C$100))) という数式を入力して下さい。 そして、B110セルをコピーして、B111~B209セルに貼り付けて下さい。 これで、重複を削除した形で、B列の内容が一覧表示される筈です。
お礼
ご回答ありがとうございます。 今回は別の方が作業列を作らずにできる方法を投稿してくださったのでそちらを利用するこにしました。
- keithin
- ベストアンサー率66% (5278/7941)
ふむ。。A列を使ってしまってもいいですね。 A B 番号 社名 1 A社 2 B社 A社 3 C社 C社 B社 A2: =IF(COUNTIF($B$2:B2,B2)=1, COUNT($A$1:A1) + 1, "") F G 番号 社名 1 A社 2 B社 3 C社 F2: =IF(ROW(F1)>MAX(A:A),"",ROW(F1)) G2: =IF(ROW(G1)>MAX(A:A),"",VLOOKUP(ROW(G1),A:B,2))
お礼
ご回答ありがとうございます。 今回は別の方が作業列を作らずにできる方法を投稿してくださったのでそちらを利用するこにしました。
A B C 1 1 A社 1 2 2 B社 2 3 3 B社 4 4 C社 4 5 5 C社 6 6 C社 7 8 9 10 11 A社 12 B社 13 C社 14 C1: =IF(COUNTIF(B$1:B1,B1)=1,A1,"") B11: =IF(ISERROR(SMALL(C$1:C$6,ROW(A1))),"",INDEX(B$1:B$6,SMALL(C$1:C$6,ROW(A1))))
お礼
ご回答ありがとうございます。 今回は別の方が作業列を作らずにできる方法を投稿してくださったのでそちらを利用するこにしました。
- soixante
- ベストアンサー率32% (401/1245)
当初のデータは何行目まであるのでしょうか。増えたりしないのでしょうか。 でも、「下のほうに」とありますので、あえて下にします。 データが100行目まであるとします。 一覧表示を110行目からするとします。 かなり強引ですが、作業列を使ってみました。 C1セルに =COUNTIF($B$1:B1,B1) として100行目まで引っ張る D1セルに 1 D2セルに =IF(C2=1,D1+1,D1+0) として100行目まで引っ張る A110セルに =ROW(A1) B110セルに =INDEX($B$1:$B$100,MATCH(A110,$D$1:$D$100,0),1) A110:B110 を選択して、下に引っ張っていけばリスト化されます。 ご参考:意味 C列は、行頭からその行までにあるその社名の数。つまり「1」は初出ということです。2以上は「それより上の行にその社名があった」ということです(=重複)。 D列は、C列が1の時(=初出の社名の時)だけ数値を1足していくようにしてあります。 2以上の時は足しません。(D1+0 とあえて書きましたが、D1でも良い) そういうわけで、1、2、3 という番号の社名だけ拾っていけば、初出の社名リストになります。 あとは、INDEXとMATCHを使い、110行目以降に作ってあります。 http://pc.nikkeibp.co.jp/pc21/tech/excel36/26/ ご意向にそぐっているでしょうか。ご参考まで。 もっとスマートな方法の回答が出るかもしれません。
お礼
ご回答ありがとうございます。 今回は別の方が作業列を作らずにできる方法を投稿してくださったのでそちらを利用するこにしました。
お礼
ご回答ありがとうございます。 作業列を作らずにできるとはエクセルは奥が深いですね。教えていただいた関数を使うことにしました。 ちなみにB列上でこの関数を使いたかったので、循環参照とならないように多少関数を変更して利用することにしました。 =INDEX($B1:$B$100,SMALL(IF(MATCH($B$1:$B$100&"",$B$1:$B$100&"",0)=ROW($B$1:$B$100),ROW($B$1:$B$100),9999),MIN(COUNTA($B1:$B$100)+1,ROW(B1))))&""