- ベストアンサー
エクセルのデータ並べ替え(抽出)の方法
- エクセルでデータを並べ替える方法について教えてください。
- データを指定の基準に従って並べ替える方法を教えてください。
- 重複のないデータを指定の順番に並べ替える方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 参考になるかどうか判りませんが・・・ 少し強引な方法になります。そして、別列に表示します。 ↓の画像のように作用用の列(表)を使わせてもらい、 作業列E2セルに =IF(B2="","",ROW(A1)*1000+COLUMN(A1)) という数式を入れ、列方向にはデータの数だけ、行方向には適当に(とりあえず数式が1000行目まで対応できるようにしていますので、 そのくらいまで)コピーしても構いません。 そして、I2セルに =IF(COUNT($E$2:$G$1000)<ROW(A1),"",INDEX($B$2:$D$1000,INT(SMALL($E$2:$G$1000,ROW(A1))/1000),MOD(SMALL($E$2:$G$1000,ROW(A1)),1000))) J2セルに =IF(I2="","",INDEX($A$2:$A$1000,SUMPRODUCT(($B$2:$D$1000=I2)*ROW($A$1:$A$999)))) という数式を入れ、I2・J2セルを範囲指定し、J2セルのフィルハンドルで下へずぃ~~~!っとコピーすると 画像のような感じになります。 以上、参考になれば良いのですが 他に良い方法があれば読み流してくださいね。m(__)m
その他の回答 (3)
- layy
- ベストアンサー率23% (292/1222)
VBAでセルを操作すれば可能です。 A1からD1の値なくなるまで、A2からC2の値なくなるまで、というように。 長い式や関数を解読するのが苦手なら、VBAを勧めます。記載は数行です。理解できれば今後の応用にも使える。 あと、 同じ位置に結果を出すのは処理上面倒なので別シートに結果を出すかCSVで結果を出すか、です。 VBAの対応は教えたら可能ですか。この対応でがんばってみて下さい。
お礼
VBAは全然わからないので。 これから勉強したいと思います。 ありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
お示しのデータがシート1の2行目から下方に入力されているとします。また、地方の名前などが最大でE列まで入力されているとします。 シート1には作業列としてF列およびG列を設けます。 F2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",COUNTA(B2:E2)+F1) G2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(F:F),"",IF(ROW(A1)<MIN(F:F),2,IF(COUNTIF(F:F,ROW(A1))>0,MATCH(ROW(A1),F:F,0),MATCH(ROW(A1),F:F,1)+1))) お求めの表は別のシートにしてA2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!F:F),"",INDEX(Sheet1!$B:$D,IF(ROW(A1)<MIN(Sheet1!F:F),2,IF(COUNTIF(Sheet1!F:F,ROW(A1))>0,MATCH(ROW(A1),Sheet1!F:F,0),MATCH(ROW(A1),Sheet1!F:F,1)+1)),COUNTIF(Sheet1!G$2:G2,IF(ROW(A1)<MIN(Sheet1!F:F),2,IF(COUNTIF(Sheet1!F:F,ROW(A1))>0,MATCH(ROW(A1),Sheet1!F:F,0),MATCH(ROW(A1),Sheet1!F:F,1)+1))))) B2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!F:F),"",INDEX(Sheet1!A:A,IF(ROW(A1)<MIN(Sheet1!F:F),2,IF(COUNTIF(Sheet1!F:F,ROW(A1))>0,MATCH(ROW(A1),Sheet1!F:F,0),MATCH(ROW(A1),Sheet1!F:F,1)+1)))) なお、作業列が目障りでしたらそれらの行を選択したのちに右クリックし、「非表示」を選択すればよいでしょう。
お礼
ありがとうございました!!
- imogasi
- ベストアンサー率27% (4737/17069)
こういう表の組み換え問題は関数では苦手な問題なんだ。VBAでやれば自然な考えで出来てしまうが。 無理して関数でやると式が複雑で、初心者には理解しにくい式になる。 其れで作業列を使うと少しは易しくなる。でも既出回答に比べ、判りやすいかどうか。どちらも難しいかも。 例データA1:E6(第1行目ーは空白のこと) - - 田中 東京 千葉 福岡 山田 京都 滋賀 佐藤 奈良 青森 USA 鈴木 カナダ 愛媛 今井 東京 埼玉 長野 茨城 ーーー F1に1 F2に=COUNTA(B2:E2) 下方向に式複写 これでデータ数の上の行からの累積個数が出る。 H1に2 H2に=MATCH(ROW()-1,$F$1:$F$6,1)+1 下方向に式を複写 I1に=COUNTIF($H$1:H1,H1) 下方向に式を複写 結果 - - 1 2 1 田中 東京 千葉 福岡 3 2 2 山田 京都 滋賀 5 2 3 佐藤 奈良 青森 USA 8 3 1 鈴木 カナダ 愛媛 10 3 2 今井 東京 埼玉 長野 茨城 14 4 1 4 2 4 3 5 1 5 2 6 1 6 2 6 3 6 4 7 1 のようになる。 J1に=INDEX($A$1:$A$100,H1,1) 下方向に式複写 K1に=INDEX($B$1:$E$100,H1,I1) 下方向に式複写 結果 J,K列 田中 東京 田中 千葉 田中 福岡 山田 京都 山田 滋賀 佐藤 奈良 佐藤 青森 佐藤 USA 鈴木 カナダ 鈴木 愛媛 今井 東京 今井 埼玉 今井 長野 今井 茨城 H,I列の式はJ,K列の式の中に書くことによって省くことが出来る。 説明を判りやすくするため、わざとセルに表示した。作業列は結局Fれつだけ必要(使用に改良できる) あと別シートに結果を出すとか、不要な式結果を空白にするとか挑戦してみてください。 H、I列が何を示しているかわかりますね。 ーーー VBAは質問者は、経験無いだろうから略。10行程度のコードの見込み。
お礼
はい、VBAは全然わからないので・・・。 ありがとうございました!!
お礼
ありがとうございました!!