• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロの記述をもっとシンプルにしたい)

マクロを使って数学と英語の点数を集計する方法

このQ&Aのポイント
  • この記事では、Excelのマクロを使って数学と英語の点数を集計する方法について解説します。
  • 具体的には、数学の満点者と不合格者、英語の満点者と不合格者を抽出し、それぞれのリストを別のシートにコピーします。
  • 最後に、不要な列を削除し、タイトルをつけ、列幅を調節して、集計を完了します。

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

  • ベストアンサー
  • soixante
  • ベストアンサー率32% (401/1245)
回答No.3

Sheet2にデータをコピー、列削除後に、わざわざ1行下に落とすなら、最初から2行目にコピーしたほうがよいような気が。 >Range("A1").Select >ActiveCell.FormulaR1C1 = "数学満点者" これについては#1さんのご指摘通り。無駄なSelectはしない、という以下記事を。 http://officetanaka.net/excel/vba/speed/s2.htm 最後の列幅変更は同じものをまとめるといいのでは。 私は、列番号で、For Next で回し、列番号のSelect Case で処理することが多いです。 (列削除も同じ形にしています。行削除も列削除もケツからが鉄則なので、ループカウンタは逆回しです。) いちおう以下ご参照ください。 ※私のテスト時には、あなたのコードで処理したものと、全く同じものができました。 トライ時はバックアップのうえお願いします。 ******************************************************************************** Sub Test条件生徒抽出シンプル版new() Dim wS1 As Worksheet, ws3 As Worksheet Dim i As Integer, j As Double Set wS1 = Worksheets("今週の点数") Set ws3 = Worksheets("Sheet3") Application.ScreenUpdating = False ws3.Cells.Clear wS1.Select With wS1.Range("A1").CurrentRegion .AutoFilter field:=5, Criteria1:=100 .Copy ws3.Range("A2") .AutoFilter field:=5, Criteria1:="<60" .Copy ws3.Range("h2") ActiveSheet.AutoFilterMode = False .AutoFilter field:=6, Criteria1:=100 .Copy ws3.Range("o2") .AutoFilter field:=6, Criteria1:="<60" .Copy ws3.Range("v2") End With ws3.Select For i = 28 To 1 Step -1 Select Case i Case 1, 6, 8, 13, 15, 19, 22, 26 Columns(i).Delete End Select Next i Range("A1").Value = "数学満点者" Range("F1").Value = "数学不合格者" Range("K1").Value = "英語満点者" Range("P1").Value = "英語不合格者" Rows(2).HorizontalAlignment = xlCenter For i = 1 To 21 Select Case i Case 1, 6, 11, 16 j = 4.63 Case 3, 8, 13, 18 j = 12.75 Case 4, 9, 14, 19 j = 6.38 Case Else j = Columns(i).ColumnWidth End Select Columns(i).ColumnWidth = j Next i wS1.Select ActiveSheet.AutoFilterMode = False Application.ScreenUpdating = True Set wS1 = Nothing Set ws3 = Nothing End Sub

tarokawa20
質問者

お礼

 大変詳しく教えていただきありがとうございました。select caseステイトメントというもの学ぶことができました。また、画面がちらつく動作を消すことや、最後にオブジェクトのリンクを解除することなど、基本を覚えることができました。 本当にありがとうございます。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

ColumnWidthもか。 C列への定義がダブリ。 同じ列幅はまとめられませんか? Range("A:A,F:F,K:K,P:P).ColumnWidth = 4.63

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Range("A1").Select ActiveCell.FormulaR1C1 = "数学満点者" を Range("A1") = "数学満点者" にするくらい?

tarokawa20
質問者

お礼

早速のご回答ありがとうございました。 シンプルに記述する基本を学ぶことができました。 本当にありがとうございます。

関連するQ&A