マクロの記述をもっとシンプルにしたい
このサイトでいただいた回答を利用し、また、マクロの記録を使って切り貼りして何とかやりたいことができるようになったマクロですが、記述に無駄があると思います。どのように書きかえるともっとスマートになるでしょうか。
作ったのは、190数名の数学と英語の点数を入力し、オートフィルタを使ってまず、数学の100点満点を取ったものを抽出します。そのリストをコピーし、隣のシートにコピーします。次に同じく数学ですが、60点未満のものを抽出し、それをコピーし、隣のシートのさっきコピーした隣にコピーします。それからオートフィルタを解除して、同じことを英語にも行います。最後に4つの表が並んだシートの不要な列を削除し、タイトルをつけ、列幅を調節し、オートフィルタを解除して終了します。
以下にマクロの記述をコピーします。まだなステイトメントばかりだと思いますので、アドバイスお願いいたします。
Sub 条件生徒抽出シンプル版new()
Dim wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.Clear
With Range("A1").CurrentRegion
.AutoFilter field:=5, Criteria1:=100 '数学の満点者を抽出
.Copy wS.Range("A1") '上のリストをコピー
.AutoFilter field:=5, Criteria1:="<60" '数学の不合格者を抽出
.Copy wS.Range("h1") '上のリストをコピー
Selection.AutoFilter '元データリストのオートフィルタを解除
.AutoFilter field:=6, Criteria1:=100 '英語の満点者を抽出
.Copy wS.Range("o1") '上のリストをコピー
.AutoFilter field:=6, Criteria1:="<60" '英語の不合格者を抽出
.Copy wS.Range("v1") '上のリストをコピー
End With
Sheets("Sheet2").Select
Range("A:A,F:F,H:H,M:M,O:O,S:S,V:V,Z:Z").Select
Selection.Delete 'コピーした表の不要な列を削除
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'タイトル行を追加
Range("A1").Select
ActiveCell.FormulaR1C1 = "数学満点者"
Range("F1").Select
ActiveCell.FormulaR1C1 = "数学不合格者"
Range("K1").Select
ActiveCell.FormulaR1C1 = "英語満点者"
Range("P1").Select
ActiveCell.FormulaR1C1 = "英語不合格者"
Rows("2:2").Select
Selection.HorizontalAlignment = xlCenter '追加したタイトルをセンタリング
Columns("A:A").ColumnWidth = 4.63 '各列の幅を変更
Columns("C:C").ColumnWidth = 12
Columns("C:C").ColumnWidth = 12.75
Columns("D:D").ColumnWidth = 6.38
Columns("F:F").ColumnWidth = 4.63
Columns("H:H").ColumnWidth = 12.75
Columns("I:I").ColumnWidth = 6.38
Columns("K:K").ColumnWidth = 4.63
Columns("M:M").ColumnWidth = 12.75
Columns("N:N").ColumnWidth = 6.38
Columns("P:P").ColumnWidth = 4.63
Columns("R:R").ColumnWidth = 12.75
Columns("S:S").ColumnWidth = 6.38
Sheets("今週の点数").Select
Selection.AutoFilter 'オートフィルタを解除
End Sub
お礼
早朝にも拘わらず御丁寧かつピンポイントの御回答を頂戴致しました。 ありがとうございました。 本当に助かりました。 変更致しましたら処理中の待ち時間が嘘みたいに短くなりました。 For Next文の例示が数字ばかりでアレアレ?という状態で泥沼にはまっておりました。 頂戴致しました文章を熟読(?)致しましたら 他の数値の例示個所を c に置き換えている形で 対象範囲をMyrangeで指定しているのかなと構文を容易に理解することができました。 今日張り切って出社できます。 重ね言葉になりますが本当にありがとうございました。 拝