こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

重複する不要な行を消し、必要行のみを残したい

下表のエクセルがあります。果物の種類はたくさん、4月から3月までの表で、みかんの2行目は1行目に5月のデータが追加されたものです。2行目があれば1行目はいらないので2行目だけを残し、1行目は非表示にして別シートに移したいのですが、うまい関数やマクロを教えてください。
A列  B列   C列  D列
果物  4月   5月   計
みかん  2       2
みかん  2    5  7
りんご  3       3
りんご  3    7  10

これを別シートに移す(不要行を削除して)

果物 4月 5月 計
みかん2  5  7
りんご3  7  10

投稿日時 - 2015-11-19 21:00:06

QNo.9082939

困ってます

質問者が選んだベストアンサー

 不要行を削除した表を自動的に別シート上に表示させる方法です。

 今仮に元の表(重複がある方の表)が存在しているシートが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行目以下に貼り付けて下さい。

 以上です。

投稿日時 - 2015-11-20 03:15:54

お礼

早速のご回答をありがとうございました。
家庭では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)))
こうかな?
でもエラーが出てうまくいきません。
求めている最終形が正にご教示いただいた表で、家でできるのに職場で使えず残念です。改めてご教示いただけませんか。

投稿日時 - 2015-11-22 09:01:17

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(5)

ANo.5

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,))
と記入、右に下にコピーすれば完成です。

投稿日時 - 2015-11-22 15:50:40

お礼

お世話になります。
ご連絡をありがとうございました。

投稿日時 - 2015-11-28 16:28:17

ANo.4

 回答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)))

投稿日時 - 2015-11-22 12:38:58

お礼

お世話になります。
少し変更したらできました。ありがとうございました。

投稿日時 - 2015-11-28 16:27:46

ANo.3

「下表のエクセルがあります」は聊か表現が変だけど、それは扨置き、
添付図参照
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))),"")

投稿日時 - 2015-11-20 19:57:44

お礼

早速のご回答をありがとうございました。
家庭では2007、職場では2003なので検証に時間がかかり、お礼が遅くなり申し訳ありませんでした。
さて、試したところ、職場でIFERRORが使えず、またSMALL関数の関係なのかわかりませんが、2行目と3行目を入れ子にすると結果が違う気がします。(ソートして使えばクリアできる問題なのかもしれませんが。)
しかし、関数がシンプルで直ぐにご回答いただいたことに大変感謝申し上げます。ありがとうございました。

投稿日時 - 2015-11-22 09:06:02

ANo.1

ご利用のエクセルのバージョンが不明のご相談ですが、最近のエクセルを使っているとします。

簡単な関数だけで作成する手順:
シート1のA列をコピー、シート2のA列にただ貼り付ける
シート2のA列を選択、データタブの「重複の削除」で一意のリストを作成する

果物
みかん
りんご

というリストが作成出来たら成功


B2に
=AVERAGEIF(Sheet1!$A:$A,$A2,Sheet1!B:B)
と記入、右に下にコピーする

計の列にはふつーにSUMの式を記入しておく。

投稿日時 - 2015-11-20 01:40:49

お礼

早速のご回答をありがとうございました。
家庭では2007、職場では2003なので検証に時間がかかり、お礼が遅くなり申し訳ありませんでした。
さて、いただいた関数を実験しましたが、職場に「重複の削除」がなく、また、この関数もないようでした。
非常に残念です。
教えていただきありがとうございました。

投稿日時 - 2015-11-22 08:54:01

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-