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

解決済みの質問

エクセルVBA

お世話になります。

マクロの記録で、下記のようにC列を基準に表内を並べ替えるように記録されました。

Range("C4").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("AQ5:AQ39" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A4:EJ39")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

ご教授いただきたい点が2点あります。

1.
end行 (今のところ39行め) が毎回変わっても
その位置を認識して、対応するようにしたいのですが、
どのように書き換えるとよいのでしょうか?
C4は、タイトル行で、毎回固定です。

やはり、毎回最終行の次の行 (今回のケースでいうと、40行目に)に、
endと手作業で入力する方法しかないでしょうか?
それしかない場合は、その記述の仕方をお願いします。

例えば、最大500行もあればいいので、途中の空白セルは、無視して
並べ替えをしてくれる記述などで教えていただけるとありがたいのですが・・・

2.
必ず、active なシートを選択しておいてから、マクロを実行するとして、
シート名の sheet1 も可変にしたいです。

よろしくお願いします。m(_ _)m

投稿日時 - 2014-06-20 11:23:11

QNo.8645842

困ってます

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

1.最終行
空白セルのない行(No.とか)で「Ctrl+↓」操作にあたる.End(xlDown).Selectするのが分かりやすいですが、データフォーマットに応じて使い分ける必要があると思います。

「VBA 最終行」で検索してみてください。
参考)
http://www.niji.or.jp/home/toru/notes/8.html
http://www.happy2-island.com/excelsmile/smile03/capter00702.shtml

最終行(r)は以下のように使えます。
 r = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
 Range("A4:EJ" & r).select
 Range("A4").Resize(140, r - 4).select


2.アクティブシート
 Sheets("sheet1") を ActiveSheet に変更。
 
ちなみに、Range("A1")のようにシート指定を省略した場合、ActiveSheetが対象になります。指定あり/なしが混在すると、混乱を招きやすいので、注意してください。

投稿日時 - 2014-06-21 19:16:14

お礼

ありがとうございました。m(_ _)m

投稿日時 - 2014-06-24 09:52:04

ANo.1

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

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

回答(1)

あなたにオススメの質問