• ベストアンサー

<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 あまり上手に表現できていないかもしれません。 不明点があればご指摘下さい、補足させていただきます。 よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です Sortメソッドにはキーは3つまでしか書けませんので、「モディファイ」しても1回の並び替えで5つのキーに対応するのは無理です。 既に書いたように並び替えを2回に分けて行うしかありませんよ 手順は2回になりますが、期待する並び替えになります。

motsu2006
質問者

お礼

できました、ありがとうございました。 しかし次なる問題が生じまして、 複数のシートで同じことをするのですが、 例えばシート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メソッドが失敗しました" となります。 なぜでしょうか???

その他の回答 (2)

回答No.3

こんにちは。 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 '---------------------------------------- 以上です。  

motsu2006
質問者

お礼

すみません、ちょっと席を外しておりましてお礼・補足が書けずにいました。 これ!#2さんのお礼欄に書いた問題も解決しそうです。 ただまたちょっと席を外すので、後ほどじっくり検証してみたいと思います。 ありがとうございました!

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

補足要求です。 >マクロ記憶を使ってもできません とはどういう意味でしょうか? 新しいマクロの記録で並び替えの手順は記録されるはずですが。 それとも並び替えのキーが5つあるのでできないということですか? もしそうだとすると、最初にD、E列で並び替えを行い、次にA、B、C列で並び替えを行うという2回の操作で期待する並び替えが行えると思います。これをマクロ記録すれば良いと思います。

motsu2006
質問者

補足

マクロ記憶では、キーが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