• ベストアンサー

エクセルのソートのマクロ

エクセルでのソートのマクロを教えてください。  範囲選択は手動でその都度変更します。優先列、昇順は変更ありません。 例えば、AからE列までデータがあり、第一優先列をD列、第二優先列をA列として、それぞれ昇順でソートします。 範囲はその都度手動で複数行を全列選択します。 つまり、適宜、複数行を選択してからこのマクロを実行すれば常に先の形式でソートできるようにしたいです。  わかりにくい記述で恐縮ですがよろしくお願いします。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

マクロの記録で適当に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

s360
質問者

お礼

kmetu 様 ありがとうございました。 御陰様で解決しました。 簡単で恐縮ですが、お礼申し上げます。

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

失礼します。 kmetuさんの提示されたコードですが Key1とKey2の参照セル番地が絶対参照のままになっています。 ここは相対参照にする必要があると思いますが、どうでしょうか。

s360
質問者

お礼

xls88 様 ありがとうございました。 今のところ、どちらでもソートできてしまうんです。 これも問題なんでしょうか。また調べてみます。 大変参考になりました。 簡単で恐縮ですが、お礼申し上げます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

例えば次のようなマクロにします。 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

s360
質問者

お礼

KURUMITO 様 ありがとうございました。 長いコードを作っていただき恐れ入ります。 アクティブシートで動作するようにしたいのですが、大変参考になりました。 簡単で恐縮ですが、お礼申し上げます。

関連するQ&A