• ベストアンサー

エクセルマクロ(VBA):並び替え

エクセルマクロの並び替えをしたいのですが、その際、並び替えのキーになる列を指定しなければなりません。 となると、毎回基準が変動している場合は思い通りにいかなくなります。たとえば、1月はG列までのデータ、でも2月はH列までのデータで、毎回一番右のデータを基準にして降順にする場合など。 この例の操作をしようとして止まってしまいました。 だれかこのマクロをご存知の方はいらっしゃいませんか。いろいろ試行錯誤してはみたものの、やはり出来そうにありません。 どうかご教授願います。 よろしくお願いします。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

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) 以上です。

hatena_orz
質問者

お礼

遅くなってすみません。 本当にありがとうございます!! 今でも使わせていただいてます。 記述の意味も今ではわかるようになりました。

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

【方法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

hatena_orz
質問者

お礼

ありがとうございます!! こういう方法もあるんですね。。。 勉強になります。

関連するQ&A