新年度の名簿に前年度のデータを入力しましょう
動画 エクセルマクロ② Next~ForとIf~Thenで連続処理と照合 YouTube
動画 エクセルマクロ③ WorksheetFunctionで関数の利用 YouTube
下の「マクロ練習用2」ボタンを押してマクロ練習用ファイルの練習シート3を選択してください。
              マクロ練習用1
 モジュール2を作り、そこにマクロを作成します。
 左下の図のどこでもよいのでマウスをもっていき、右クリックして、挿入→標準モジュールを選んで、右下の図のようにModule2(モジュール2)を追加してください。


        

①前年度の国語の点数を新年度の名簿の国語の欄に写しましょう。
マクロ 意味
Sub 前年度照合()
 Dim x As Integer
 Dim y As Integer
 For x = 3 To 21
 For y = 3 To 21
  If Cells(x, 5) = Cells(y, 17) Then
   Cells(x, 6) = Cells(y, 18)
  End If
 Next y
 Next x
End Sub

xは整数です。
yは整数です。
xは3~21まで変化します。
yは3~21まで変化します。
もし1人目の新年度の名前と同じ名前が前年度にあれば、
新年度の国語の欄に前年度の国語の点が入ります。
一旦終わります。
次に2人目、3人目・・・と同じ作業をしていきます。19人目で終わります。

 ボタンを作成して、ボタンの名前を「前年度照合」に変えましょう。
 もし、社会、数学、理科、英語の点も一気に新年度の名簿に移したい場合は、
   Cells(x, 6) = Cells(y, 18)のあとに
   Cells(x, 7) = Cells(y, 19)
   Cells(x, 8) = Cells(y, 20)
   Cells(x, 9) = Cells(y, 21)
   Cells(x, 10) =Cells(y, 22)
と続けていきます。
 終わりの21という数字は50とか100でも、適当で構いません。ただ、あまり大きな数字にすると時間がかかってしまいます。「Counta」でどこかのセルに人数を出しておく方法もあります。セルW1に「Counta(E3:E100)」と入力しておき、「For 3 To 3+Range(W1-1」と表したりします。
 さらなる発展として、何列ものデータを何行にもわたって式を記入しなくても、1行で済ませる方法もあります。

マクロ 意味
Sub 前年度新年度照合()
 Dim 生徒の最終行数 As Long
 生徒の最終行数 = Cells(Rows.Count, 5).End(xlUp).Row
 Dim i, j, k As Long
 For i = 3 To 生徒の最終行数
 For j = 3 To 生徒の最終行数
 For k = 6 To 10
  If Cells(i, 5) = Cells(j, 15) Then
   Cells(i, k) = Cells(j, k + 10)
  End If
 Next k
 Next j
 Next i
End Sub

生徒名が表示されている最終の行数を定義します
生徒の最終の行数は生徒の氏名の列E(5列目)の最終行です
変数iとjとkを定義します
iは3行目から生徒の最終行まで数字が変わっていきます
jは3行目から生徒の最終行まで数字が変わっていきます
kは6(列)目から10(列)まで変わっていきます
もし新年度の氏名と前年度の氏名が同じならば
新年度の項目1に前年度の項目1を入力します
同じように新年度の項目2にも前年度の項目2を入力します
これを10回繰り返します


②関数を利用してマクロで合計と順位を出せるようにしましょう。

 マクロに関数を入力しても、そのままでは働いてくれません。しかし、「WorksheetFunction」を使うと、関数をそのまま利用することができるようになります。関数を利用しているにもかかわらず、関数そのものはセルに入力されないので、ファイルの容量が小さくなるという利点があります。
 下の「マクロ練習用3」ボタンを押して、マクロ練習用ファイルを開いてください。


               マクロ練習用3


 SUM関数を用いて合計をマクロで出します。
Sub 合計()
 Dim g As Integer
 For g = 2 To 20
  Cells(g, 11) = WorksheetFunction.Sum(Range(Cells(g, 6), Cells(g, 10)))
 Next g
End Sub

 RANK関数を用いて順位をマクロで出します。
      
Sub 順位()
Dim j As Integer
For j = 2 To 20
Cells(j, 12) = WorksheetFunction.Rank(Cells(j, 11), Range("k2:k20"))
Next j
End Sub

 範囲に$を使わなくてもよいので、多少気が楽です。いろいろな関数で使えます。試してみてください。

               マクロ実践3へ