今回はワークシートをコピーするマクロを作っていく方法を考えていきます。
前回も使用した以下の画像をご覧ください。
この画像では、田中、高橋、山田という個人のデータを取り扱ったシートがあります。
ここに新たに別の人のシートを追加するというマクロを作っていきましょう。
追加の元となるデータは田中のシートとなります。
田中のシートをコピーしてデータを書き換えていきます。
■ポイント
ポイントとなるのは、ワークシートをコピーするにはどういう記述をするか?というところです。
今回は以下のメソッドを使います。
Worksheets("田中").Copy After:=Worksheets(Worksheets.Count)
これは、田中というシートを末尾にコピーするという意味になります。
Worksheets.Countというのは、ワークシートの数を表しています。
Afterへこれを指定することにより、末尾に指定したシートをコピーすることができます。
■回答
Sub Q8_Answer()
Dim i As Integer
For i = 1 To 10
Worksheets("田中").Copy After:=Worksheets(Worksheets.Count) ' 末尾に追加
ActiveSheet.Name = "サンプル" & i
ActiveSheet.Range("B3").Value = "サンプル" & i
Randomize
ActiveSheet.Range("C3").Value = Int(100 * Rnd + 1)
ActiveSheet.Range("D3").Value = Int(100 * Rnd + 1)
ActiveSheet.Range("E3").Value = Int(100 * Rnd + 1)
Next i
End Sub
■解説
今回はfor文を利用して、10個のシートを作成しています。
ActiveSheet.Range("C3").Value = Int(100 * Rnd + 1)
ActiveSheet.Range("D3").Value = Int(100 * Rnd + 1)
ActiveSheet.Range("E3").Value = Int(100 * Rnd + 1)
この3行は何をしているかというと、乱数で得点となるデータを取得しています。
これは、1~100の間の整数を指定のセルへ格納することを意味しています。
これで、サンプル1~サンプル10までの10人分のダミーデータができました。
しっかりと点数まで入っています。
ただし、このマクロ、1つだけ注意があって、同じことを2回できないことです。
つまり、このマクロは2回目に実行した時にはエラーとなります。
なぜなら、すでにサンプル1~10というシートが存在するからです。
エクセルは同名のシートは共存することができません。
一意の名前である必要があるのです。
最後のマクロを実行した後のエクセルの画像を載せておきます。
画像では切れていますが、しっかりとサンプル10まで作成されています。
国語1点とか英語6点とかはちょっとひどい有様ですね・・・
数学バカみたいなデータが作成されてしまいました(笑)