- ベストアンサー
<Excel> 並び替えの自動化について
OS:XP Office:2003 エクセルの質問です。 表の並び替えをマクロで行いたいのですが、マクロ記憶を使ってもできません。 コーディング、教えていただけますか? | A | B | C | D | E | F 1| ヘッダー部 2|man_id |企業id |支店id |交渉id |担当id | 明細データ 3| 4| 5| 6| 7| 8| …… こんな感じで、 ソート対象範囲 A3:F65536 ソート優先順 A B C D E あまり上手に表現できていないかもしれません。 不明点があればご指摘下さい、補足させていただきます。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#01です Sortメソッドにはキーは3つまでしか書けませんので、「モディファイ」しても1回の並び替えで5つのキーに対応するのは無理です。 既に書いたように並び替えを2回に分けて行うしかありませんよ 手順は2回になりますが、期待する並び替えになります。
その他の回答 (2)
- kobouzu_su
- ベストアンサー率45% (24/53)
こんにちは。 Zap35さんの回答をちゃーーーんと読みましょうね。(^^;;; ws.Range("A3:F65536").Sort _ Key1:=Range("D3"), Order1:=xlAscending, _ Key2:=Range("E3"), Order2:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption3:=xlSortNormal ws.Range("A3:F65536").Sort _ Key1:=Range("A3"), Order1:=xlAscending, _ Key2:=Range("B3"), Order2:=xlAscending, _ Key3:=Range("C3"), Order3:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, _ DataOption3:=xlSortNormal このように、先ず、D,Eでソートして、次に、A,B,Cでソートするということです。 もちろん、CDE、ABの順でもかまいませんが。 それから、Range("A3:F65536") の範囲は、実際のデータが入ってる範囲を指定した方がいいでしょう。 '------------------------------------------------- Sub Test() Dim LastRow As Long Dim myRange As Range 'データのある最終行 LastRow = Range("A65536").End(xlUp).Row '並び替えたいデータのある範囲 Set myRange = Range("A3", Cells(LastRow, "F")) 'C~Eでソート myRange.Sort _ Key1:=Range("C3"), Order1:=xlAscending, _ Key2:=Range("D3"), Order2:=xlAscending, _ Key3:=Range("E3"), Order3:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, _ DataOption3:=xlSortNormal 'A,Bでソート myRange.Sort _ Key1:=Range("A3"), Order1:=xlAscending, _ Key2:=Range("B3"), Order2:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal End Sub '---------------------------------------- 以上です。
お礼
すみません、ちょっと席を外しておりましてお礼・補足が書けずにいました。 これ!#2さんのお礼欄に書いた問題も解決しそうです。 ただまたちょっと席を外すので、後ほどじっくり検証してみたいと思います。 ありがとうございました!
- zap35
- ベストアンサー率44% (1383/3079)
補足要求です。 >マクロ記憶を使ってもできません とはどういう意味でしょうか? 新しいマクロの記録で並び替えの手順は記録されるはずですが。 それとも並び替えのキーが5つあるのでできないということですか? もしそうだとすると、最初にD、E列で並び替えを行い、次にA、B、C列で並び替えを行うという2回の操作で期待する並び替えが行えると思います。これをマクロ記録すれば良いと思います。
補足
マクロ記憶では、キーが3つまでしか対応してくれませんでした。 そうです、並び替えのキーが5つあります。 よって、マクロ記憶で記憶されたソースをモディファイする 必要があると思い、質問させていただきました。 ちなみに、ソースは↓これです ws.Range("A3:F65536").Sort _ Key1:=Range("A3"), Order1:=xlAscending, _ Key2:=Range("B3"), Order2:=xlAscending, _ Key3:=Range("C3"), Order3:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, _ DataOption3:=xlSortNormal
お礼
できました、ありがとうございました。 しかし次なる問題が生じまして、 複数のシートで同じことをするのですが、 例えばシートAとシートB。 Set ws1 = ThisWorkbook.Worksheets("シートA") Set ws2 = ThisWorkbook.Worksheets("シートB") 'まずシートA ws1.Activate ws1.Range("A3:O65536").Sort _ Key1:=ws1.Range("A3"), Order1:=xlAscending, _ Key2:=ws1.Range("B3"), Order2:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal このように書くと、 実行時エラー1004 "RangeクラスのSortメソッドが失敗しました" となります。 なぜでしょうか???