• ベストアンサー

エクセルの並び替え

日付順に並び替えして、更にBの数字が同じであるデータを並べたいのですがどうすればいいのでしょうか? (上の表を、下の表のように変更したいのですが…)    A(日付)    B 1  2004/10/5  100 2  2004/10/8  105 3  2004/10/1  105 4  2004/10/5  110 5  2004/10/9  100 6  2004/10/3  105 7  2004/10/5  105 8  2004/10/8  110      ↓    A(日付)   B 1  2004/10/1  105 2  2004/10/3  105 3  2004/10/5  105 4  2004/10/8  105 5  2004/10/5  100 6  2004/10/9  100 7  2004/10/5  110 8  2004/10/8  110  

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

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

#12です。その補足の >もしVBAを使うとどんなやり方があるのでしょうか ツール-マクロ-VBEでVBEの画面が出る。 そのメニューで挿入-標準モジュールで画面が出るから 空白の一番大きい部分に、下記をコピーし、貼りつける。 下記コードをコピーした内のどこでも良いが、クリックしておいて、 メニューの実行-Sub/ユーザー・・実行をクリック。 Sub test01() d = Range("A65536").End(xlUp).Row '-----ソート B-A列 Range(Cells(1, "A"), Cells(d, "B")).Sort _ Key1:=Range("B1"), Order1:=xlAscending, _ Key2:=Range("A1"), Order1:=xlAscending '-----最旧日付セット k = Cells(1, "B") h = Cells(1, "A") For i = 1 To d If k = Cells(i, "B") Then Cells(i, "C") = h Else k = Cells(i, "B") h = Cells(i, "A") Cells(i, "C") = h End If Next i '-----ソート C-B-A列 Range(Cells(1, "A"), Cells(d, "C")).Sort _ Key1:=Range("C1"), Order1:=xlAscending, _ Key2:=Range("B1"), Order1:=xlAscending, _ Key3:=Range("A1"), Order1:=xlAscending End Sub

yuuki1213yuuki
質問者

お礼

更にVBAまで教えていただきありがとうございました 本当に勉強になりました また分からないときはご質問しますのでよろしくお願いいたします

その他の回答 (13)

回答No.13

No12さんへ。 なる程、B列が同じだった場合、その中で一番古い日付をC列に書き出しているんですね。 役に立ったに1票入れました。

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

関数で出来ましたよ。しかし配列数式を聞くのは初めてではないかな。 VBAで本当はやりたいが。 (例データ) 2004/10/5  100 2004/10/8  105 2004/10/1  105 2004/10/5  110 2004/10/9  100 2004/10/3  105 2004/10/5  105 2004/10/8  110 (関数式) C1に=MIN(IF($B$1:$B$10=B1,$A$1:$A$10,"")) と入れて、左手指でSHIFTとCTRLキーを両方押しつつ、右で ENTERキーを押す。配列数式といいまして、先頭と、後尾に {と}が付きます。配列数式を使わないとこの問題は多分解けません。 $B$10、$A$10は最下行ですから修正のこと。 C列の書式は日付にしておくこと(本質ではないが、日付と 見た目わかるように) そしてC1の式をC10まで複写します。 そしてA1:C10を範囲指定して、 第1キー C列 第2キー B列 第3キー A列 でソートしてください。 (結果)A1:C10 2004-10-1  105 2004-10-1 2004-10-3  105 2004-10-1 2004-10-5  105 2004-10-1 2004-10-8  105 2004-10-1 2004-10-5  100 2004-10-5 2004-10-9  100 2004-10-5 2004-10-5  110 2004-10-5 2004-10-8  110 2004-10-5

yuuki1213yuuki
質問者

お礼

本当にありがとうございました 教えていただいた配列数式は初めて聞きました 非常に便利なものがあるのですね これでやりたいことが完璧にできました 今後も何か分からないことが、またありましたら教えてください

yuuki1213yuuki
質問者

補足

ありがとうございました おかげさまで思った通りに並び替えできました もしVBAを使うとどんなやり方があるのでしょうか 参考までに教えていただけるでしょうか お願いいたします

  • subri
  • ベストアンサー率28% (16/56)
回答No.11

A列を優先し、B列は次という順序でいいでしょうか。 A1、B1は見出しだとして、 B1を選択してから AZ(昇順で並べ替え)ボタンを押します。 次にA1を選択してから AZ(昇順で並べ替え)ボタンを押します。 つまり、どうでもいい列から並べ替えして行きます。 さて、その結果はどう並べ替えられたか、 そしてどうしたい、と補足をお願いします。

yuuki1213yuuki
質問者

補足

説明が下手で申し訳ありませんでした B列の数字が同じものをグループとして、そのグループの中で一番古いA列の日付をキーとしてグループ順に並び替えたいのですが subriさんの方法ですとA列(日付)順に並び替えられてしまいうまくいきませんでした また、いい方法があれば教えてください

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

どう言うルールで並べるのですかね。 100が105の前に来るなら、単純なんだが。 言葉で言い表して見てください。一般には実例が判りやすいが、言葉で説明した方が判りやすい例もあります。 質問者はどうしたのだろう。速く出てきて、補足説明なりすべきだなあ。 ●多分下記ルールか。 B列でまとめて、そのグループの中で一番旧い日付け(X)を代表とする。 100-10/5 105-10/1 110-10/5 代表のXが旧い順にそのグループは全員、先に行く。 105グループ 100グループ(同じ時はコードの小が先) 110グループ 同じコードの中で一番旧い日付を決める関数を考えて見ます。難しそう。

yuuki1213yuuki
質問者

お礼

ありがとうございました 自分でもいろいろ考えていますが、どうしてもうまくいきません。 また何か分かりましたら教えてください。 お願いします。

yuuki1213yuuki
質問者

補足

説明が不足していて申し訳ありませんでした 文章で書くと、どう書けばよいか分からずに例を記入したのですが、やりたいことはまさしくimogasiさんのルールどおりです。 よろしくお願いいたします。

回答No.9

NO8さん、 >配列された例題を拝見して、ご質問の趣旨は逆なので>はないかと思いました。(^_^;) >優先順位は、「先ずB列、次にA列」なのですね。 >よろしいでしょうか? 違いますよ。 あくまでも、A=>Bの順ですよ。 B列を良く見てください。

yuuki1213yuuki
質問者

お礼

説明がうまくなくて、皆さんにご迷惑かけているようです まだ全然うまくいきませんので、もし分かりましたらまた教えてください

yuuki1213yuuki
質問者

補足

B列の同じ数字のものをグループとして、グループの中で一番古いA列の日付をキーとしてグループ順に並べたいのですが

  • dojustice
  • ベストアンサー率61% (140/226)
回答No.8

配列された例題を拝見して、ご質問の趣旨は逆なのではないかと思いました。(^_^;) 優先順位は、「先ずB列、次にA列」なのですね。 よろしいでしょうか? 範囲を選択した後、「データ」→「並べ替え」で、「最優先されるキー」に「列B」を選びます。 「2番目に優先されるキー」に「列A」を選びます。 「OK」で一括並べ替え完了です。 わたしがやってみたところでは、優先列を選ぶとき、キー操作で「列B」と打ち込むと できないようです。 ▼で「列B」、「列A」を呼び出さないとできないようです。

yuuki1213yuuki
質問者

お礼

ありがとうございます 説明がうまくなくて、皆さんにご迷惑をかけていますが、まだ自分でもうまくいかないので、もしいい方法がありましたら教えてください

yuuki1213yuuki
質問者

補足

説明が下手ですみません B列の数字の同じものをグループとして集め、そのグループの中で一番古いA列の日付をキーとしてグループ順に並び替えたいのですが・・・ わかりましたか 更に分かりずらくなったでしょうか

  • digirock
  • ベストアンサー率22% (78/347)
回答No.7

NO.1で回答した者です。 ちょっと気になり自分で試してみたのですが出来なかったですね(汗)申し訳ないです。 NO.4さんの方法でもちょっと無理のようです。 マクロを使えば出来そうですが。。

yuuki1213yuuki
質問者

お礼

いろいろ考えていただきありがとうございます マクロでOKですのでよろしくお願いします 自分で考えても全然分かりませんので、何かありましたら、また教えてください

  • bekky1
  • ベストアンサー率31% (2252/7257)
回答No.6

フィルター機能を使うと簡単にランダムな日付でも並びかわります。 特定の日だけも呼び出せるし、 その後に、B列も昇り順で並び変えたりでどうでしょう?

yuuki1213yuuki
質問者

お礼

ありがとうございました あまりエクセルの機能を知らないので、いろいろ教えていただき非常に勉強になります まだやり方がわかりませんので、何かありましたら教えてください

yuuki1213yuuki
質問者

補足

全データの一覧表を作成したいので、フィルター機能ではうまくいきませんでした。 それとも私の知らない機能があるのでしょうか やり方があれば、また教えてください

回答No.5

エクセルの中で範囲を指定し、 データ→並べ替え→昇順 で出来ますが、yuuki1213yuukiさんのおっしゃるデータでは何を優先するのかがわかりません。 日付順、Bのデータ順とした場合、質問欄とは少し違う結果となります。

yuuki1213yuuki
質問者

お礼

回答ありがとうございました 依然、やり方がわかりませんので、もし何か方法がありましたら、また教えてください お願いします

yuuki1213yuuki
質問者

補足

説明が下手なのですみません Bの数字が同じものを一つのグループとして集め、そのグループの中で一番古い日付をキーとしてグループ順に並べ替えたいのですが

回答No.4

はじめまして。 B列は昇順(小⇒大)とか降順(大⇒小)にはされないのでしょうか? 回答になるのかわかりませんが、以下の方法を思いつきました。 1.A、B列のデータを範囲選択 2.データメニューから並べ替えを選択 3.最優先されるキーにはB列を   2番目に優先されるキーにA列を(降順)設定します。

yuuki1213yuuki
質問者

お礼

いろいろ考えていただきましてありがとうございます まだ、うまく行きませんので良い方法がありましたらまた教えてください

yuuki1213yuuki
質問者

補足

優先するのはA列の日付です。 B列の数字が同じであるデータをひとつのグループとして、グループの中の一番古い日付をキーとしてグループ順に並び替えたいのですが 説明がへたくそなので分かりずらいかもしれませんがよろしくお願いします