- ベストアンサー
マクロで行の並び替えを行う方法について
- マクロを使用して指定の行の並び替えを行いたい場合、SetRangeメソッドを使用します。
- 例えば、Range("a6:Cl16").CurrentRegionを指定すると、A列からCL列までの6行目から16行目までの範囲が並び替えの対象になります。
- しかし、実際には1行目から並び替えが行われてしまう場合もありますので、注意が必要です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
参考に。 例データ A1:C12 xxx 22 銅 sss 33 金 ddd 44 金 ttt 55 銀 aaa bbb ccc <--見出し行のつもり d 12 銅 s 34 銅 d 45 金 f 67 銀 g 55 銀 h 66 金 i 47 銅 ●わざと、A1:C4は余分なものを入れている例。 これは下記実行でそのまま変わらずーー>OKかと。 .●SortFields.Add Key:=Range("C2") データのないセルを指定しているが、OKのよう。C列だけ解釈してくれる。 ●第5行は見出しだが、範囲外を指定しているが、その代わり、 .Header = xlNo にしている。 範囲に含めてxlYesにもできる。 ただし、2行以上の見出し行の場合などの場合も含め考えると、 xlNo方式がすっきりするのでは? ● .SetRange Range("A6:C12")は見出し部分は含めてない。 ●参考 http://officetanaka.net/excel/vba/tips/tips148c.htm >という2段階で行います。実際の並べ替えを担当するのがSortオブジェクトです ・並べ替え条件の設定と ・並べ替えの実行 の2段構え。 --- Sub test01()Sample4() With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Range("C2"), CustomOrder:="金,銀,銅" .SetRange Range("A6:C12") .Header = xlNo .Apply End With End Sub ーーー 結果 A1:C12 xxx 22 銅 sss 33 金 ddd 44 金 ttt 55 銀 aaa bbb ccc d 45 金 h 66 金 f 67 銀 g 55 銀 d 12 銅 s 34 銅 i 47 銅 === ひょっとして、本質問は、 CurrentRegionの利用の質問かな。 前後左右に余分なもの=データが隣接する場合は、具体的に、ソートする実データのセル範囲を、Range(”・・”)で指定したほうが良いのでは? スタート行、列は普通は毎回実行で動かないと思うが、最終用、列は End(xlUp)、End(xlToLeft)で最終行、列は採れるでしょうから、それを範囲指定の式に組み込む。
その他の回答 (1)
- kkkkkm
- ベストアンサー率66% (1719/2589)
Sub test() Range("a6:Cl16").CurrentRegion.Select End Sub でどこが選択されるか確認してみてください。 CurrentRegionは空白のセルで囲まれた範囲になります。 A1から選択されるのでしたら .SetRange Range("a6:Cl16") にして試してみてください。
お礼
返信遅れて申し訳ありません。 詳しい解説ありがとうございました。
お礼
返信遅れて申し訳ありません。 詳しい解説ありがとうございます。 分りました。 officetanakaというサイトを参考にさせていただきます。