こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルの並べ替えをマクロで

知識が無くなかなか解決しません。教えて下さい。

エクセル(2000)のマクロの記録で並べ替えを記録すると下記の様になりました。

Range("A1:M57").Select
ActiveWorkbook.Worksheets("表2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("表2").Sort.SortFields.Add Key:=Range("C2:C57"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("表2").Sort.SortFields.Add Key:=Range("D2:D57"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("表2").Sort
.SetRange Range("A1:M57")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A2").Select
End Sub

次のように改良する方法を探しています。

(1)Range("A1:M57").Select → 表によって行数が違う為、行数とおりに範囲選択したい。
M65536とすれば良いのかもしれませんが、パソコンの処理能力が低く、なるべく負担が掛からない様にしたいのですが。列数はA列からM列の限定です。

(2)ActiveWorkbook.Worksheets("表2")  → ("表2")限定ではなく他のシート名でも並べ替えが出来る様にするにはどのようにすれば良いのでしょうか。

いろいろ試しましたがうまく出来ません。お知恵をお貸し下さい。よろしくお願い致します。

投稿日時 - 2013-03-24 19:46:43

QNo.8009712

すぐに回答ほしいです

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

sub macro1()
range("A:M").sort key1:=range("C1"), order1:=xlascending, key2:=range("C1"), order2:=xlascending, header:=xlyes
end sub

で十分です。



#補足1
そのマクロはエクセル2000では動きません。当然2000では録れないマクロです。


#補足2
>負担が掛からない様にしたい

上述のようにしておくことで、負担は全くかかりません。



#補足3
>他のシート名でも並べ替え

表2じゃないなら、いったいどのシートを並べ替えたいのですか。
上述は他を全く指定せずに、代わりに現在見えてるシートで並べ替えます。

投稿日時 - 2013-03-24 20:43:00

お礼

ありがとうございます。
orderとkey部分を増やしても問題なく出来ました。
応用の利く回答に頭が下がります。
エクセル(2000)としたのは申し訳けございません。
勤め先のバージョンと自宅使用のバージョンが違ってたので、
古い方を記入してしまいました。以後気をつけます。
早速業務で今使っているマクロに組み入れて使わせて頂きます。

投稿日時 - 2013-03-24 21:37:07

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問