- ベストアンサー
エクセルのソートのマクロ
エクセルでのソートのマクロを教えてください。 範囲選択は手動でその都度変更します。優先列、昇順は変更ありません。 例えば、AからE列までデータがあり、第一優先列をD列、第二優先列をA列として、それぞれ昇順でソートします。 範囲はその都度手動で複数行を全列選択します。 つまり、適宜、複数行を選択してからこのマクロを実行すれば常に先の形式でソートできるようにしたいです。 わかりにくい記述で恐縮ですがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マクロの記録で適当にA列からE列まで選択して(たとえばA1からE20まで) 実際にやりたいソートを実行し記録します。 その後記録されたマクロの Range("A1:E20").Select をコメントアウトするか削除すれば出来上がります。 多分以下のようになると思います。 Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("A1") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _ xlSortNormal, DataOption2:=xlSortNormal
その他の回答 (2)
- xls88
- ベストアンサー率56% (669/1189)
失礼します。 kmetuさんの提示されたコードですが Key1とKey2の参照セル番地が絶対参照のままになっています。 ここは相対参照にする必要があると思いますが、どうでしょうか。
お礼
xls88 様 ありがとうございました。 今のところ、どちらでもソートできてしまうんです。 これも問題なんでしょうか。また調べてみます。 大変参考になりました。 簡単で恐縮ですが、お礼申し上げます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えば次のようなマクロにします。 Sub ソートA() Dim A As Integer Dim B As Integer Dim RowA As Integer A = Selection.Row B = Selection.Count RowA = B / 5 Range(Cells(A, 1), Cells(RowA, 5)).Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Cells(A, 4), Cells(RowA, 4)), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Cells(A, 1), Cells(RowA, 1)), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range(Cells(A, 1), Cells(RowA, 5)) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A1").Select End Sub
お礼
KURUMITO 様 ありがとうございました。 長いコードを作っていただき恐れ入ります。 アクティブシートで動作するようにしたいのですが、大変参考になりました。 簡単で恐縮ですが、お礼申し上げます。
お礼
kmetu 様 ありがとうございました。 御陰様で解決しました。 簡単で恐縮ですが、お礼申し上げます。