プロが教えるわが家の防犯対策術!

4つ以上のキーでソートしたい場合の書き方を教えていただけますでしょうか。
宜しくお願いします。
order3の次にorder4をキーとしてソートしたいのですが、
書き方が分かりません。

Worksheets("明細").Activate
Worksheets("明細").Range("B3:CX" & Totalnum + 2) _
.Sort Key1:=Range("N3"), order1:=xlAscending, _
 Key2:=Range("Q3"), order2:=xlAscending, _
Key3:=Range("G3"), order3:=xlAscending, _
Key4:=Range("AT3"), order4:=xlAscending

別の質問ですが、order4を別のシートから(?)ということはできるのでしょうか?

A 回答 (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度目は辞退させていただきます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/15 10:23

>試してみたのですが、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) _

でソート範囲が正しく取得されているか確認してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
マクロの記録でサンプルテストをしてみたものを以下のように少し変更し、実行してみたのですが、やはり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

お礼日時:2012/06/13 10:33

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
    • good
    • 0
この回答へのお礼

ありがとうございます。
試してみたのですが、4番目のキーがソートされませんでした。
Key1:=.Range("AT3"), order1:=xlAscendingのKey番号を4に変更はしなくて良いでしょうか?

あと1点別で教えていただきたいのですが、
その4番目のキーを別のシートからのものとするということは可能でしょうか?

お礼日時:2012/06/11 19:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!