マクロで「並べ替え」をする
Excel2007 で「並べ替え」をするには、以下のようなVBAのコードになります。
これは自動記録したマクロにちょこっと手を加えただけのものです。
Sub Macro1R() Dim shtA As Worksheet Dim sortA As Sort Dim rngA As Range Set shtA = Worksheets("Sheet1") Set sortA = shtA.Sort Set rngA = shtA.Range("A1").CurrentRegion sortA.SortFields.Clear sortA.SortFields.Add Key:=rngA.Item(1, 1) _ , SortOn:=xlSortOnValues _ , Order:=xlAscending _ , DataOption:=xlSortNormal sortA.SetRange rngA sortA.Header = xlYes sortA.MatchCase = False sortA.Orientation = xlTopToBottom sortA.SortMethod = xlPinYin sortA.Apply End Sub
Excel2003 までの「並べ替え」のコードとずいぶん変わっています。
Excel2003 まではキーの数が3つまでという制限があったのですが、Excel2007 ではその制限をなくしたためにコードの方にも変更が生じたのでしょう。
まぁそれはいいとして、気になる点が2つあります。
1つ目は、一般操作のときとエラーチェックの基準が異なることです。
うっかり
sortA.SortFields.Clear
を忘れると、「並べ替え」の設定がえらいことになりますが、そのときにエラーメッセージが出ないことです。
一般機能で「並べ替え」ダイアログで、重複した並べ替えの条件を指定すると、それを実行しようとしたときにエラーメッセージが出ます。
しかし、VBA で重複した並べ替えの条件を指定してもエラーにはなりません。
sortA.SortFields.Add Key:=rngA.Item(1, 1) _ , SortOn:=xlSortOnValues _ , Order:=xlAscending _ , DataOption:=xlSortNormal sortA.SortFields.Add Key:=rngA.Item(1, 1) _ , SortOn:=xlSortOnValues _ , Order:=xlAscending _ , DataOption:=xlSortNormal
として、Apply メソッドを実行してもエラーにならないのです。
実際に、それを実行した後に「並べ替え」ダイアログを出すと、重複した並べ替えの条件が設定されたままになっています。
しかし、それを実行した後に保存して、再度そのブックを開くときにエラーメッセージが出ます。
「並べ替え」の条件はシートの属性として保存されます。
シートの属性に不具合があるかどうか開くときにチェックされるので、そこで初めてエラーメッセージが出るということになるようです。
2つ目は、ヘルプが適切じゃないことです。
一番最後の Apply メソッドについてヘルプで調べてみました。
sortA.Apply より前の部分が「並べ替え」の設定に関するコードで、このメソッドは「並べ替え」そのものを実行するものです。
しかし、ヘルプの記述では・・・
Excel 開発者用リファレンス Sort.Apply メソッド コピーした並べ替え書式を適用します。
となっています。
これではなんのことやら分かりませんね。