- ベストアンサー
エクセルで、自動的に並べ替えをしたいのです。。。
こんにちは。 今、ある表の並べ替えの問題で悩んでいます。 (並べ替え、オートフィルタ、条件付書式もやってみましたが、 自分ではできませんでした;;) その表とは、在庫品のデータの入力された表なんですが、 A B C D E 01-0023 M1 完了 MBC01 2000/01/02 01-0043 M2 未 MBC02 2003/03/02 01-0123 M1 完了 MBC01 2006/01/02 となっているとします。 並べ替えでも、ある時は”A”項目を昇順で、 またある時は”E”項目を降順で、見てみたいとします。 この場合によっては違う項目をキーに並び替えたい場合、 ボタン等をつけるなどして、アクセスのフォームのように 押せば、その”A”なら”A”をキーに昇順で並び替えられ、 ”E”なら”E”をキーに降順で並び替えられる。。。という 夢のような方法があるのでしょうか? オートフィルタだと、抽出になってしまいますし。。。 2つのシートを作成して、その都度実行する方法ではない、 その時々で違う並び替え方法ってありますか? できれば、元の表は並び替えず、シート参照をしてみたいと思っているのですが、無茶ですか? どなたか教えてください、お願いします。。。。。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
実用で使ったことはありませんが、今考えてみました。 マクロを使えばできそうです。 とりあえず、降順昇順は置いといて、指定したセルの昇順に並べることを考えました。 コマンドボタンをSheet1に1つ貼り付けます。そのクリックイベントに Private Sub CommandButton1_Click() Range("A1:C10").Sort Key1:=Range(Range("F1")), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub と入れます。 (A)F1セルに、A2やB2やC2のように、列を表す文字列を入れて、 (B)ソートするセル範囲を範囲指定し、 (C)コマンドボタンをクリックすると、その列で昇順に並べ替えられます。 上記は、並べ替えのマクロの記録をとり、極く一部改造したものですから作りやすいでしょう。 >元の表は並び替えず、シート参照をしてみたいと思っているのですが・・ これはVBAで自動でシートコピーをとって、上記のようなコードをいれれば可能なように「見え」ます。 しかし文字通りではできません。 色々できないかという、疑問は良いですが、VBAでもできるようにならないと、人に答えをもらうことはできても、自分ではできないわけで、できるといえるのかどうか。
その他の回答 (2)
- wafumofu
- ベストアンサー率35% (83/234)
自動? もしかして私が質問の意図を読み違えてるのかな? バーにあるAZ↓・ZA↓での並び替えではないのかな? 例えば、B列を昇順で並び替えるときにB列のどこかのセルを選んでAZ↓で並び替えるという意味で受け取ってましたが、違いますか? 違う場合はごめんなさいです。 あと >元の表は並び替えず の意味も気になってはいたんですが・・・。
補足
すみません、ややこしすぎて。。。 普通の並び替えではなくて、ある表を作成済みですがデータは日々更新のものがあるとします。。 そのデータは色々な場合に使用するため、ある特定のキーで並び替える必要があるのですが、それが2通りあるのです。 それを、毎回、毎回選択して並び替えというのはデータが多くなってきたので、 アクセスのフォームのような感じの、ボタンを押せば(1)番目のキーで並び替えが実行されて、違うボタンを押せば(2)番目のキーで並び替えが実行される。。。という、手間を短くしたいなぁと思ってることです。 ただ、エクセルにフォームなんてないし、自動(というか、半分手動?)に出来たら。。。と思ったのです。 すみません、質問の仕方がややこしいですね。。
- wafumofu
- ベストアンサー率35% (83/234)
普通は出来ますよ。 ただ表の中に不都合があると出来なくなります。 空白が多かったり結合セルあったりする場合等。 見出しが原因で出来なくなる場合もあるようです。 見出しが原因の場合は、見出しとデータの間に1行データの無い行を入れると並び替えが出来るようになるかもしれません。 データ内に結合セルがある場合は結合の解除で出来るようになると思います。 私が思い当たる原因はその辺ですね。
補足
回答ありがとうございます。 自動並び替えは出来ますか? 出来ると聞いてホッとしました。 出来れば、方法も教えていただけないでしょうか? 今のところ、どうやったらいいのか、普通の並べ替え以外では 思いつきません。 回答お待ちしています。
お礼
すみません、時間がなくなってしまいました。 何とか、上記の答えを自分なりにもう一度やってみます。 ありがとうございました。
補足
マクロとか使うとは思ってなかったんですが、条件付書式のような便利なツールがあれば。。。と思って質問しました。 VBAを使用した事は昔にあったぐらいだったので。。 教えていただいたように、そのままコピーしましたがエラーで使用できませんでした。。 『 Private Sub CommandButton1_Click() Dim Msg ' エラーが発生したら、エラー メッセージを作成します。 On Error Resume Next ' エラーのトラップを留保します。 Err.Clear Err.Raise 6 ' "オーバーフロー" エラーを発生させます。 ' エラーの発生をチェックした後、メッセージを表示します。 If Err.Number <> 0 Then Msg = "エラー番号 " & Str(Err.Number) & Err.Source & _" でエラーが発生しました。" & Chr(13) & Err.Description MsgBox Msg, , "エラー", Err.HelpFile, Err.HelpContext End If Range("A2:W798").Sort Key1:=Range(Range("A2")), Order1:=xlAscending, Header:=xlGuess, _ ordercustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, Sortmethod _ :=xlPinYin, dataoption1:=xlSortNormal End Sub 』 というのが現状です。。 そのまま(あ、勿論セルの範囲とか、キーとかは直しました)、コピーがいけなかったのでしょうか?