- ベストアンサー
エクセルマクロ(VBA):並び替え
エクセルマクロの並び替えをしたいのですが、その際、並び替えのキーになる列を指定しなければなりません。 となると、毎回基準が変動している場合は思い通りにいかなくなります。たとえば、1月はG列までのデータ、でも2月はH列までのデータで、毎回一番右のデータを基準にして降順にする場合など。 この例の操作をしようとして止まってしまいました。 だれかこのマクロをご存知の方はいらっしゃいませんか。いろいろ試行錯誤してはみたものの、やはり出来そうにありません。 どうかご教授願います。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1行目:見出し行 使用列:A列~最終列は不定 並び替えのキーは、毎回不定な最終列 '----------------------------------------- Sub Test() Dim LastRow As Long Dim LastClm As Integer LastRow = Cells(Rows.Count, "A").End(xlUp).Row LastClm = Cells(1, Columns.Count).End(xlToLeft).Column Range("A1", Cells(LastRow, LastClm)).Sort _ Key1:=Cells(2, LastClm), Order1:=xlDescending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin End Sub '---------------------------------------- LastClmが、最終列 LastRowが、最終行 で、表の範囲は、A1~Cells(LastRow, LastClm) 以上です。
その他の回答 (1)
- mt2008
- ベストアンサー率52% (885/1701)
【方法1:作業列+マクロ記録で行うなら】 作業列に一番右のデータを表示し、作業列をキーにデータの並び替えを行う。 添付の図の場合 K1に=MAX(INDEX((D2:I5<>"")*COLUMN(D2:I5),)) L2に=INDEX(A2:I2,1,$K$1) が入って居ます。 【方法2:マクロでやる場合】 データの最右列の位置を求め、その列をキーに並び替える。 nColLast = Range("C2").End(xlToRight).Column '2行目のデータが入っている一番右の列 Columns("C:I").Sort Key1:=Cells(1, nColLast), Header:=xlGuess
お礼
ありがとうございます!! こういう方法もあるんですね。。。 勉強になります。
お礼
遅くなってすみません。 本当にありがとうございます!! 今でも使わせていただいてます。 記述の意味も今ではわかるようになりました。