プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

Excel2010で並べ替えの記録マクロを作りましたが、同ブック内の他のシートでも並べ替えが実行できるようにするにはどうしたらいいでしょうか?
以下がマクロの記述です。

ActiveWorkbook.Worksheets("テスト").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("テスト").Sort.SortFields.Add Key:=Range("D5:D110"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("テスト").Sort.SortFields.Add Key:=Range("E5:E110"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("テスト").Sort.SortFields.Add Key:=Range("F5:F110"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("テスト").Sort
.SetRange Range("A4:I110")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

当方は初心者で、同じ質問を検索しましたが、2007以前の解答しか見つけられず、該当する記述を試してみましたがうまくいきませんでした。
どうぞよろしくお願いいたします。

A 回答 (1件)

こんにちは。



2007以前は、ソートメソッドといい、2007以降は、ソートオブジェクトといいます。
しかし、2007以前のソートメソッドでも、互換性はあるはずです。
こちらでやってみましたが、特に問題はないようですね。

他のシートでも使えるということは、汎用性を持たせるということでしょうか。
同じ起点(A4)が同じで、同じ範囲なら、Worksheets("テスト") をActiveSheet にすればよいはずです。ダメだとしたら、どこでエラーがつくのでしょうか?

'//
Sub TestSort1()
'ソートオブジェクト
 Dim rng As Range
  With ActiveSheet
  Set rng = Range("A4:I110")
  With .Sort
   .SortFields.Clear
   .SortFields.Add Key:=rng.Columns(4), _
   SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   .SortFields.Add Key:=rng.Columns(5), _
   SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   .SortFields.Add Key:=rng.Columns(6), _
   SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
   .SetRange rng
   .Header = xlYes
   .MatchCase = False
   .Orientation = xlTopToBottom
   .SortMethod = xlPinYin
   .Apply
  End With
 End With
End Sub

Sub SortTest2()
'Sort メソッド
With ActiveSheet
  With .Range("A4:I110")
    .Sort Key1:=.Cells(4, 4), Order1:=xlAscending, _
      Key2:=.Cells(4, 5), Order2:=xlAscending, _
      Key3:=.Cells(4, 6), Order3:=xlDescending, _
      Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
      Orientation:=xlTopToBottom, SortMethod:=xlPinYin
  End With
 End With
End Sub
'///
    • good
    • 1
この回答へのお礼

WindFaller様

さっそくのご回答をありがとうございました。
「互換性はあるはず」というご指摘に、もう一度データを見直してみたところ、非表示にしている列に項目名と書式を設定していないことに気づきました。
これを修正して、「Worksheets("テスト") をActiveSheet 」に書き換えてみたところ、うまくいきました。
基本的なミスで動作していなかったようで、お恥ずかしい限りです。

書いていただいた記述も二つとも試してみました。
今はまだ内容がよく理解できませんが、今後の参考にさせていただきたいと思います。
ご丁寧に教えていただき、本当にありがとうございました。

お礼日時:2015/04/19 01:56

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