- ベストアンサー
重複する不要な行を消し、必要行のみを残す方法
- エクセルの表に重複する不要な行がある場合、特定の行のみを残して他の行を削除する方法を紹介します。
- 与えられた例では、みかんの2行目は1行目に5月のデータが追加されたものです。1行目は不要なので、2行目だけを残し、1行目を非表示にして別のシートに移動します。
- 以下の手順に従って操作します。 1. 2行目に非表示のフィルタを適用して、1行目を非表示にします。 2. 別のシートに移動する前に、行のフィルタを解除します。 3. 2行目以降の不要な行を削除します。 4. 最後に、別のシートに移動します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
不要行を削除した表を自動的に別シート上に表示させる方法です。 今仮に元の表(重複がある方の表)が存在しているシートがSheet1であり、不要行を削除した表をSheet2上に表示させるものとします。 又、Sheet3のA列とB列を作業列として使用するものとします。 まず、Sheet3のA2セルに次の関数を入力して下さい。 =IF(AND(INDEX(Sheet1!$A:$A,ROW())<>"",ISNUMBER(INDEX(Sheet1!$N:$N,ROW()))),IF(COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1,COUNT(A$1:A1)+1,""),"") 次に、Sheet3のB2セルに次の関数を入力して下さい。 =IF(AND(INDEX(Sheet1!$A:$A,ROW())<>"",ISNUMBER(INDEX(Sheet1!$N:$N,ROW()))),IF(COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=COUNTIF(Sheet1!$A:$A,INDEX(Sheet1!$A:$A,ROW())),INDEX(Sheet1!$A:$A,ROW()),""),"") 次に、Sheet3のA2~B2のセル範囲をコピーして、Sheet3のA列~B列の3行目以下に貼り付けて下さい。 次に、Sheet2のA2セルに次の関数を入力して下さい。 =IFERROR(INDEX(Sheet1!$A:$A,MATCH(ROWS(A$2:A2),Sheet3!$A:$A,0)),"") 次に、Sheet2のB2セルに次の関数を入力して下さい。 =IF($A2="","",IF(ISERROR(1/(INDEX(Sheet1!$A:$N,MATCH($A2,Sheet3!$B:$B,0),COLUMNS($A:B))<>"")),"",INDEX(Sheet1!$A:$N,MATCH($A2,Sheet3!$B:$B,0),COLUMNS($A:B)))) 次に、Sheet2のB2セルをコピーして、Sheet2のC2~N2のセル範囲に貼り付けて下さい。 次に、Sheet2のA2~N2のセル範囲をコピーして、Sheet2のA列~N列の3行目以下に貼り付けて下さい。 以上です。
その他の回答 (4)
- keithin
- ベストアンサー率66% (5278/7941)
Excel2003で不要行を削除した(一意の)リストを作成するには、フィルタオプションの設定を利用します。下記などご参考に。 http://www.wanichan.com/pc/excel/2003/05/192.html シート2のA列に 果物 みかん りんご の一意のリストが作成出来たら、シート1に元のリストがあるとして シート2のB2には =MAX(INDEX((Sheet1!$A$2:$A$99=$A2)*Sheet1!B$2:B$99,)) と記入、右に下にコピーすれば完成です。
お礼
お世話になります。 ご連絡をありがとうございました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.2です。 >職場では2003なので という様な事がありますと二度手間になりますので、Excelの御質問をされる場合には、御質問文中にて使用するExcelのバージョンを明記して頂く様に願います。 それで、 >職場でIFERRORが使えず という事でしたら、Sheet2のA2セルに入力する関数である =IFERROR(INDEX(Sheet1!$A:$A,MATCH(ROWS(A$2:A2),Sheet3!$A:$A,0)),"") という関数を、以下の様な関数と差し替えて下さい。 =IF(ROWS(A$2:A2)>COUNT(Sheet3!$A:$A),"",INDEX(Sheet25!$A:$A,MATCH(ROWS(A$2:A2),Sheet3!$A:$A,0)))
お礼
お世話になります。 少し変更したらできました。ありがとうございました。
- msMike
- ベストアンサー率20% (364/1804)
「下表のエクセルがあります」は聊か表現が変だけど、それは扨置き、 添付図参照 Sheet1!E2; =IF(COUNTIF(A$2:A2,A2)=COUNTIF(A$2:A$5,A2),ROW(),"") Sheet2!A2: =IFERROR(INDEX(Sheet1!A:A,SMALL(Sheet1!$E$2:$E$5,ROW(A1))),"")
お礼
早速のご回答をありがとうございました。 家庭では2007、職場では2003なので検証に時間がかかり、お礼が遅くなり申し訳ありませんでした。 さて、試したところ、職場でIFERRORが使えず、またSMALL関数の関係なのかわかりませんが、2行目と3行目を入れ子にすると結果が違う気がします。(ソートして使えばクリアできる問題なのかもしれませんが。) しかし、関数がシンプルで直ぐにご回答いただいたことに大変感謝申し上げます。ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
ご利用のエクセルのバージョンが不明のご相談ですが、最近のエクセルを使っているとします。 簡単な関数だけで作成する手順: シート1のA列をコピー、シート2のA列にただ貼り付ける シート2のA列を選択、データタブの「重複の削除」で一意のリストを作成する 果物 みかん りんご というリストが作成出来たら成功 B2に =AVERAGEIF(Sheet1!$A:$A,$A2,Sheet1!B:B) と記入、右に下にコピーする 計の列にはふつーにSUMの式を記入しておく。
お礼
早速のご回答をありがとうございました。 家庭では2007、職場では2003なので検証に時間がかかり、お礼が遅くなり申し訳ありませんでした。 さて、いただいた関数を実験しましたが、職場に「重複の削除」がなく、また、この関数もないようでした。 非常に残念です。 教えていただきありがとうございました。
お礼
早速のご回答をありがとうございました。 家庭では2007、職場では2003なので検証に時間がかかり、お礼が遅くなり申し訳ありませんでした。 さて、試してみましたが、職場でIFERRORが使えず、調べたところ、IF(ISERROR)で代替できるとのことだったのでやってみました。 シート2のA2=IF(ISERROR(INDEX(Sheet1!$A:$A,MATCH(ROWS(A$2:A2),Sheet3!$A:$A,0)),"",INDEX(Sheet1!$A:$A,MATCH(ROWS(A$2:A2),Sheet3!$A:$A,0))) こうかな? でもエラーが出てうまくいきません。 求めている最終形が正にご教示いただいた表で、家でできるのに職場で使えず残念です。改めてご教示いただけませんか。