モジュール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」ボタンを押して、マクロ練習用ファイルを開いてください。
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
|
範囲に$を使わなくてもよいので、多少気が楽です。いろいろな関数で使えます。試してみてください。 |