- 締切済み
重複 一つして行きたい
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- msMike
- ベストアンサー率20% (364/1804)
》 自分がやったのがI列のみ… 》 ↓ =IFERROR(INDEX(I:I,AGGREGATE(15,6,ROW($2:$300)/(COUNTIF(INDIRECT("i2:i"&ROW($2:$300)),I$2:I$300)=1),ROW(A1))),"") 凄い! なぜそれで良いのか、試行錯誤しながら検討しているのですが、私には難解過ぎて未だに未解決です。(トホホ…) ところで、上に挙げられた式はセル O2 の式ですよね? 「I列のみ」でなく、J列、K列にも対応させるには、 セル O2 を P2、Q2 にコピーした式中の "i2:i" の部分をそれぞれ "j2:j"、"k2:k" に変更すればOKだと思います。お試しください。その後で、範囲 P2:Q2 を下方にズズーッとオートフィルですね。 私が試行錯誤しているのは、同じ部分の汎用性です。端的に申せばセル セル O列の式を右2列にオートフィルさせればOKにすることです。 上式を考えた貴方に教えて貰いたいのが、私が試した結果から申せば 「(COUNTIF(INDIRECT("i2:i"&ROW($2:$300)),I$2:I$300)=1)」の部分を、 単に「(COUNTIF(I$2:I$300,I$2:I$300)=1)」にしたら、なぜNGになるのか?です。 是非教えてください。 質問者に回答をお願いする我がままをお許しください。m(_._)m
- imogasi
- ベストアンサー率27% (4737/17069)
質問の標題には、 ・エクエルの関数を使うこと、 ・列で、重複しないデータを作成希望であることを 明確に書け。 忙しい人などは、表題を見て、答えるかどうか、判断しているのではないか? また画像データ例が、質問例として、複雑すぎる。 ーー 標題の >重複 一つして行きたい 文章になってない。 ーー この型の問題は (1)操作 フィルター (2)関数 UNIQUE 最近のバージョンの関数 (3)関数と操作の組み合わせ (4)作業列を使うが関数で行う (5)(2)ー(4)でない、関数のみ 後になるほど、難易度は上がるばかり。式も複雑になる。 ーー エクセルで、条件つきの抜出は、考え方も独特で、式が複雑になる。 ーー 小生も、#1のご回答の論調に賛成です。 こんなのに時間を取っていては、本来の仕事はどうなる。 Googleで「関数 重複のないデータ抽出」などで照会すれば、記事がでる。 https://office-hack.com/excel/duplicate-extract/ ーーー (4)などは、関数でも、おなじみのCOUNTIF関数を使える。 A,B列に 文字列値 重複サイン A A B A D A A B A C A B A B2の式 =IF(COUNTIF($A$2:A2,A2)=1,"A","") 下方向に式を複写 結果はB列。 この結果では、不満足なのは、「上から順次の行」に詰めて表示出来てないこと。 ここでフィルタオプションの設定を使う方法もあるが、関数では、 http://office-qa.com/Excel/ex257.htm の説明では ーーー {=INDEX(A:A,SMALL(IF(A:A<>"",ROW(A:A)),ROW()))} 1.A列で空白以外の行番号を出す → 1,3,4,6 2.1の行番号を小さい順(数式入力セルの行番号を利用)で取り出す 3. 2で取り出した行番号をINDEX関数の○行部分に引き渡し、指定された値を返す → INDEX(A:A,1) INDEX(A:A,3) … ーー 上記の私の例では C2セルに =INDEX(A:A,SMALL(IF(B:B<>"",ROW(B:B)),ROW())) と入れて SHIFT+CTRL+ENTERキーの3つのキーを同時押しする。 配列数式という。。 この方式は (1)作業列B列を使う (2)配列数式という、やや難しい方式を使う。該当データが、複数行で返さざるを得ないため、使わざるをえない。 という、欠点がある。 C列は 重複なし A B D C このやり方は、「重複なし」でなくて、条件該当の行の抜出にも使える。 全く作業列を使わない式は長くなるので略。 ーーー このように回答表現も、大変なんだ。そのことを思い至って、掲示例なども工夫して簡単化してほしい。
- SI299792
- ベストアンサー率47% (774/1618)
INDIRECT を使っているので横にコピペしても動きません。 手作業で直します。 O2_ =IFERROR(INDEX(I:I,AGGREGATE(15,6,ROW($2:$300)/(COUNTIF(INDIRECT("I2:I"&ROW($2:$300)),I$2:I$300)=1),ROW(A1))),"") P2_ =IFERROR(INDEX(J:J,AGGREGATE(15,6,ROW($2:$300)/(COUNTIF(INDIRECT("J2:J"&ROW($2:$300)),J$2:J$300)=1),ROW(B1))),"") Q2_ =IFERROR(INDEX(K:K,AGGREGATE(15,6,ROW($2:$300)/(COUNTIF(INDIRECT("K2:K"&ROW($2:$300)),K$2:K$300)=1),ROW(C1))),"") 下へコピペ。 大体、このような難しい数式を使うこと自体やめた方がいいです。意味が解らないし、メンテナンスも不可能です。 R~T列をワークエリアに使います。目障りなら非表示にして下さい。 O2_ =IFERROR(INDEX(I:I,MATCH(ROW()-1,R:R,0)),"") Q2迄コピペ。 R2_ =R1+(COUNTIF(I$2:I2,I2)=1) T2までコピペ。 纏めて下へコピペ。 ワークエリアを嫌がって、複雑な数式で苦労する人が多いですが、時間の無駄です。 どうしてもワークエリアが嫌なら、 マイクロソフト365 股はグーグルスプレッドシートを使いましょう。 O2_ =unique(I2:I1000) 右へコピペ。 股は値をコピペした後重複の削除を行う。VBA を使う。その方が早いです。