• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBAのソートについて)

EXCEL VBAのソート方法とは?

このQ&Aのポイント
  • EXCEL VBAのソートについて詳しく教えてください。特に、4つ以上のキーでソートする方法について知りたいです。
  • また、order4を別のシートから指定することは可能なのでしょうか?
  • お願いします。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>ちなみにN3→Q3→G3→AT3の順番でソートしたいです。 Excelは1度に3つまでのキーしか並べ替えられません ですから、過去2度、説明しましたが優先順位の一番低い4番目のキーで ソートを行い、その後1番キー、2番キー、3番キーでソートを行います。 With ActiveWorkbook.Worksheets("明細").Sort   .SortFields.Clear   .SortFields.Add Key:=Range("AT3"), _     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal   .SetRange Range("B3:CY" & Totalnum + 2)   .Header = xlYes   .MatchCase = False   .Orientation = xlTopToBottom   .SortMethod = xlPinYin   .Apply   .SortFields.Clear   .SortFields.Add Key:=Range("N3"), _     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal   .SortFields.Add Key:=Range("Q3"), _     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal   .SortFields.Add Key:=Range("G3"), _     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal   .SetRange Range("B3:CY" & Totalnum + 2)   .Header = xlYes   .MatchCase = False   .Orientation = xlTopToBottom   .SortMethod = xlPinYin   .Apply End With 同じことを3度説明しましたので4度目は辞退させていただきます。

ymoshimoshi
質問者

お礼

すみません。ありがとうございました。

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>試してみたのですが、4番目のキーがソートされませんでした。 一度、手作業で試されては如何ですか 1)まずは第1キーにRange("AT3")を指定してソートを行ってください。 2)次に第1キーにRange("N3")、第2キーにRange("Q3")、第3キーにRange("G3")を   指定してソートを行ってください。 以上でお望みの結果になったでしょうか? うまくいったのなら以上の作業をマクロの記録を取ればコードは得られると思います。 >order4を別のシートから(?)ということはできるのでしょうか 引数 orderは単に昇順、降順を指定するもので "別のシート" の意図が解りませんが? それと1つ気になるのですが >Worksheets("明細").Activate MsgBox Worksheets("明細").Range("B3:CX" & Totalnum + 2).Address(0, 0) >Worksheets("明細").Range("B3:CX" & Totalnum + 2) _ でソート範囲が正しく取得されているか確認してみてください。

ymoshimoshi
質問者

お礼

ありがとうございます。 マクロの記録でサンプルテストをしてみたものを以下のように少し変更し、実行してみたのですが、やはりAT3(優先順位4番目)がソートされませんでした。 EXCEL2007からはSortfieldが使えそうなのですが、何か間違っている箇所があれば 教えていただけないでしょうか? すみません。 ちなみにN3→Q3→G3→AT3の順番でソートしたいです。 With ActiveWorkbook.Worksheets("明細").Sort ActiveWorkbook.Worksheets("明細").Sort.SortFields.Clear   ActiveWorkbook.Worksheets("明細").Sort.SortFields.Add Key:=Range("N3"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("明細").Sort.SortFields.Add Key:=Range("Q3"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("明細").Sort.SortFields.Add Key:=Range("G3"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("明細").Sort.SortFields.Add Key:=Range("AT3") _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal    .SetRange Range("B3:CY" & Totalnum + 2) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

4番目のキーで先にソートしましょう With Worksheets("明細")   .Range("B3:CX" & Totalnum + 2).Sort _   Key1:=.Range("AT3"), order1:=xlAscending   .Range("B3:CX" & Totalnum + 2).Sort _   Key1:=.Range("N3"), order1:=xlAscending, _   Key2:=.Range("Q3"), order2:=xlAscending, _   Key3:=.Range("G3"), order3:=xlAscending End With

ymoshimoshi
質問者

お礼

ありがとうございます。 試してみたのですが、4番目のキーがソートされませんでした。 Key1:=.Range("AT3"), order1:=xlAscendingのKey番号を4に変更はしなくて良いでしょうか? あと1点別で教えていただきたいのですが、 その4番目のキーを別のシートからのものとするということは可能でしょうか?