エクセルのデータ並べ替え(抽出)の方法

このQ&Aのポイント
  • エクセルでデータを並べ替える方法について教えてください。
  • データを指定の基準に従って並べ替える方法を教えてください。
  • 重複のないデータを指定の順番に並べ替える方法について教えてください。
回答を見る
  • ベストアンサー

エクセルのデータ並べ替え(抽出)の方法

エクセルのデータ並べ替え(抽出)の方法 を教えてください。 下記のようなデータがあるとします。   A    B    C   D 1 田中  東京  千葉  福岡 2 山田  京都  滋賀 3 佐藤  奈良  青森  USA 4 鈴木  カナダ 愛媛 A列は名前、B列以降は文字列です。B列以降はC列までの行、D列までの行とさまざまです。重複セルはありません。 これを下記のように並べ替えたいです。   A    B    C   D 1東京  田中 2千葉  田中 3福岡  田中 4京都  山田 5滋賀  山田 6奈良  佐藤 7青森  佐藤 8USA   佐藤 9カナダ 鈴木 10愛媛  鈴木 こういうことは可能でしょうか??? 教えてください。 よろしくお願いします。

noname#203857
noname#203857

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 参考になるかどうか判りませんが・・・ 少し強引な方法になります。そして、別列に表示します。 ↓の画像のように作用用の列(表)を使わせてもらい、 作業列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

noname#203857
質問者

お礼

ありがとうございました!!

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

VBAでセルを操作すれば可能です。 A1からD1の値なくなるまで、A2からC2の値なくなるまで、というように。 長い式や関数を解読するのが苦手なら、VBAを勧めます。記載は数行です。理解できれば今後の応用にも使える。 あと、 同じ位置に結果を出すのは処理上面倒なので別シートに結果を出すかCSVで結果を出すか、です。 VBAの対応は教えたら可能ですか。この対応でがんばってみて下さい。

noname#203857
質問者

お礼

VBAは全然わからないので。 これから勉強したいと思います。 ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

お示しのデータがシート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)))) なお、作業列が目障りでしたらそれらの行を選択したのちに右クリックし、「非表示」を選択すればよいでしょう。

noname#203857
質問者

お礼

ありがとうございました!!

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

こういう表の組み換え問題は関数では苦手な問題なんだ。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行程度のコードの見込み。

noname#203857
質問者

お礼

はい、VBAは全然わからないので・・・。 ありがとうございました!!

関連するQ&A

  • エクセルでデータ抽出→並べ替え

    エクセルで   A列   B列   C列    D列  E列        4月1日 9:00 山田太郎   9:15   佐藤仁  4月1日 10:05 佐藤聡 10:00 鈴木正夫  4月1日 11:15 高橋二郎 11:00 山田勇        4月2日 9:05 渡邊正志 9:15 佐々木正夫        4月2日 10:00 山田太郎  10:15 佐藤仁         4月2日 11:02 佐藤仁   11:00 高橋二郎 という複数の営業マンの訪問予定表があります。この「山田太郎」さんに 月間の訪問予定表を発行したいと思っています。 ※発行対象は全員です。 関数でもマクロでも結構ですが、ご教授いただけると助かります。

  • エクセルで、次のような自動入力をしたい

      A    B    C    D   E  ・・ AA 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)

  • エクセルで2つの条件を元に

    エクセル2007で名簿を作っています。 1ヶ月ごとにメンバーの順が変わります。 シート1(番号順に名簿を作りました)   A  B   C  1 1     山田 2 2     木村 3 3 副長 佐藤 4 4     鈴木 5 5 班長 田中 6 6     長田  シート2(こちらがメンバーに配る名簿です)   A   B  C   D 1 班長    1    3 2 田中    山田  鈴木 3 4 副長    2    4 5 佐藤    木村  長田 A2に田中,A5に佐藤を選んでくるのはvlookupで成功しました。 質問したいのは C列D列に上記の番号のようにシート1の名前を入れていきたいのですが,田中,佐藤の分を抜いた上で番号の若い順に選んできたいのです。 どのような関数をどのように使えば成功するでしょうか。  

  • エクセルで検索、並び替えの方法

    エクセルで以下のような並び変えはできないでしょうか? エクセルでA列とB列に名前が入っています。 A列、B列の名前は若干違います。 B列の名前をA列に揃えて並び変えることはできないでしょうか?  「処理前」       「処理後」  A   B        A   B 伊藤  山田      伊藤         山田  田中      山田  山田 鈴木  鈴木      鈴木  鈴木 田中  伊集院     田中  田中                     伊集院 宜しくお願いします。

  • (EXCEL)重複したデーターの抽出について

    EXCEL2003 シート「sheet1」に下記のようなデーターがあります。 <sheet1>   A   B   C  D 1 りんご 青森 AAA BBB 2 みかん 愛媛 CCC DDD 3 みかん 青森 AAA BBB 4 りんご 青森 AAA BBB 5 みかん 愛媛 CCC DDD A列とB列が同じ値のものをシート「sheet2」に重複しているデーター は1行だけになり、E列にカウントした数が入力されるようにしたいです。 (C列やD列は同じ値でなくてもA列とB列が同じ値の時にカウントして抽出したいです) <sheet2>   A   B   C  D   E  りんご 青森 AAA BBB  2  みかん 愛媛 CCC DDD  2   ご教示のほどお願いします。

  • エクセルにて「期間指定」で「データ集計」する方法

    エクセルで営業商談用顧客管理を行っています。 シート1には、商談日を下記のように記載しており A列 B列 日付 担当 1/1  山田 1/6  田中 1/8  佐藤 2/3  山田 2/4  山田 2/6  佐藤 2/9  田中 3/1  佐藤 3/2  山田 3/5  佐藤 別シートにて、例えば1月にどの担当が何件商談をしたか、を 下記のように管理したいのですが 山田 ○件 田中 ○件 佐藤 ○件 こちらの関数の指定方法について、ご教授いただけないでしょうか? よろしくお願いします

  • excel 重複したデータのコピー

    例えばこんなデータがあるとします。 名前  値 鈴木  1 佐藤  2 佐藤  5 小林  2 田中  3 田中  1 田中  2 斉藤  0 山田  4 山田  2 というデータから 佐藤  2 佐藤  5 田中  3 田中  1 田中  2 山田  4 山田  2 という感じで名前が2つ以上あるデータだけ抽出・コピーをしたいのですが、 どういう風にすれば出来るでしょうか。

  • (エクセル)日付に相当するデータを入力する

    シート1に以下のように、A列には氏名、C列に日付がランダムに入力されています。   A   B   C 1 山田     4/4 3:00 2 佐藤     4/3 2:00 3 石井     4/4 3:00 4 加藤     4/3 2:00 5 田中     4/1 5:00 シート2に上から順位に並び替えたいです   A   B   C   D   E   F   G 1          4/1    4/2    4/3   4/4   4/5 2  1   田中 4/1 5:00 3  2   佐藤         4/3 2:00 4  3   加藤         4/3 2:00 5  4   山田             4/4 3:00 6  5   石井             4/4 3:00 1行目のC~Gには既に4/1~4/5が入力されています。 対応するところに日付を入力し、さらにB列には氏名を表示したいです。 C2には「=IF(AND(SMALL(Sheet1!$C$1:$C$5,$A2)<D$1,SMALL(Sheet1!$C$1:$C$5,$A2)>=C$1),SMALL(Sheet1!$C$1:$C$5,$A2),"")」としてうまくいきました(C1:F6も同様)。 問題はB列なのですが、B2に「=INDEX(Sheet1!$A$1:$A$5,MATCH(SUM(C2:G2),Sheet1!$C$1:$C$5,0))」や「=INDEX(Sheet1!$A$1:$A$5,MATCH(SMALL(Sheet1!$C$1:$C$5,A2),Sheet1!$C$1:$C$5,0))」としても同じ失敗結果になりました。 両方とも、上から順に 田中 佐藤 佐藤 ←失敗(加藤が正解) 山田 山田 ←失敗(石井が正解) となってしまい、重複する日付が失敗してしまいます。 B列にどのようにしたら良いか教えてください。 よろしくお願いします。

  • エクセルで検索、抽出を教えてください。

    いろいろ考えたのですが、わかりません。ご指導よろしくお願いします。 下記の表があります。A1:C1でタイトル、A2:C7でデータが入っています。Dの列にLOOKUPやMATCHなどを用いてそれぞれの氏名の人のQ3の回答を出したいのです。(D2,D3,D4にはうううを入れたい。D5,D6,D7にはかかかを計算で入れたいのです。)よろしくお願いします。   A, B, C, D 1 氏名,Q,こたえ 2 佐藤,Q1,あああ 3 佐藤,Q2,いいい 4 佐藤,Q3,ううう 5 鈴木,Q1,えええ 6 鈴木,Q2,おおお 7 鈴木,Q3,かかか

  • エクセル(2003・2007)でデータ抽出し、別シートを作成するための

    エクセル(2003・2007)でデータ抽出し、別シートを作成するための関数を教えて下さい ●シート名:サンプルA                ●シート名:サンプルB   A  B    C   D  E・・        A  B     C   名前 日付1  日付2  備考      名前 日付1   備考 1 山田 2010/10/15 2010/10/10 ああ    1 鈴木 2010/10/18 うう 2 佐藤             いい       2 太田 2010/10/21 かか  3 鈴木 2010/10/18 うう     → 4 井上 2010/11/20 ええ 5 石田 2010/8/7 2010/10/7 おお 6 太田 2010/10/21 かか 具体的に上記のデータから【B列が本日から10日間以内かつC列がスペース】のデータのA・B・D行を別シートに作成する関数を教えて下さい よろしくお願いします ※なぜか文字がずれてしまってて、すいません・・・

専門家に質問してみよう