- ベストアンサー
マクロを使い選択範囲を次々と変えて並べ替えたい
- Excelのマクロを使って、選択範囲を次々と変えながら並べ替えたい場合について質問があります。
- 具体的な手順として、範囲選択を行い、マクロを記録して並べ替えを実行し、マクロを終了します。
- しかし、次に別の範囲を選択して同じマクロを実行すると、最初の範囲が再び並べ替えられてしまいます。マクロの中身を確認すると、最初の範囲選択の部分が記述されていることが分かりました。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
準備: A4:G12を選択する マクロの記録を開始する 「相対参照」を選択 『しない』 E列の降順で並べ替える(先頭行を見出しにするか否か適切に設定する) 記録終了する ALT+F11でマクロを確認すると、次のようなのが記録されています Sub Macro1() ' ' Macro1 Macro ' ' ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("E4:E12") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A4:G12") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub このうちの「2か所」を、次の通りに書き換えます Sub Macro1() ' ' Macro1 Macro ' ' ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("E:E") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange selection .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub あとは 範囲選択 A4~G12を選択してマクロを実行する 範囲選択 A14~G22を選択してマクロを実行する 範囲選択 A28~G32を選択してマクロを実行する。
その他の回答 (3)
- mar00
- ベストアンサー率36% (158/430)
選択範囲の行数が10行毎とか一定ではないようなので 範囲を指定する規則性のようなものが必要かと思います。 例えば空白行が出てきたら範囲指定するとか 合計という言葉出てきたら範囲指定するなどのように。
- MackyNo1
- ベストアンサー率53% (1521/2850)
記録されたコードの特定のセル範囲を指定している部分を、以下のように選択範囲になるように修正してみてください。(最初のセル選択の部分が記載されていたらこの部分は削除してもOKです) Key:=Intersect(Selection, Range("E:E")) SetRange Selection
- keithin
- ベストアンサー率66% (5278/7941)
準備: A4:G12を選択する マクロの記録を開始する 「相対参照」を選択する(*) E列の降順で並べ替える(先頭行を見出しにするか否か適切に設定する) 記録終了する 手順: A4を選択、マクロを実行する A14を選択、マクロを実行する A24を選択、マクロを実行する。 *:補足 ご利用のエクセルのバージョンが不明なので、具体的にどこを選んで何をクリックするのかお話しできません。 エクセル2003以前なら「記録終了」ツールバーに「相対参照」ボタンが載っているので、クリックして選択された状態にするということです。エクセル2007以降なら開発タブにあります。 ご相談投稿では、普段ご利用のソフトのバージョンまでキチンと明記する事を憶えて下さい。次回以降のご参考に。
補足
すいませんソフトのバージョンを書き忘れていました。 パソコンはWin81の64ビットです。エクセル2013です。 早速開発タブの相対参照を表示できるようにしました。 並べ替えを行いたい行数が9行だったり7行だったり5行だったり変化するのですがどのように対応したらいいのでしょうか?
お礼
降順にしたかったので「Order:=xlAscending」を「Order:=xlDescending」しました。 マクロを「Ctrl+w」として 範囲選択:Ctrl+w 範囲選択:Ctrl+w 範囲選択:Ctrl+w バッチリ大成功でした。 昇順・降順も分かりました。 感謝感謝です、ありがとうございました。