第13講 3次元ループと3次元配列による成績一覧表の高度化

第3話 成績一覧表マクロ(シート1枚版)のコード作り

エラー原因は、qにあります。
同じものが複数あるので、名前が適切ではありませんと出てきてしまうのです。

さて、解消していきましょう。
2番目のPrivate Sub CommandButton1_Click()、Private Sub CommandButton2_Click()、Private Sub CommandButton3_Click()をそれぞれ
Private Sub CommandButton4_Click()、Private Sub CommandButton5_Click()、Private Sub CommandButton6_Click()と変更します。
同様に、3番目のPrivate Sub CommandButton1_Click()、Private Sub CommandButton2_Click()、Private Sub CommandButton3_Click()をそれぞれ
Private Sub CommandButton7_Click()、Private Sub CommandButton8_Click()、Private Sub CommandButton9_Click() に
4番目のPrivate Sub CommandButton1_Click()、Private Sub CommandButton2_Click()をそれぞれ
Private Sub CommandButton10_Click()、Private Sub CommandButton11_Click()、に変更してください。
4番目の
Private Sub CommandButton3_Click()

  Dim i As Byte, j As Byte

  For i = 1 To 40
    For j = 1 To 5
      Cells(6 + i, 1 + j) = Int(100 * Rnd())
    Next
  Next

End Sub
は不要ですから、Delete等で消しておきましょう。不要な理由は、年間処理の場合はデータ作成は必要ないからです。




次に、f1、f2、f3、f4、f5、f6、f7、f8、g1、g2をそれぞれ変更します。
2番目のf1、f2、f3、f4、f5、f6、f7、f8、g1、g2をそれぞれ
f21、f22、f23、f24、f25、f26、f27、f28、g21、g22に
3番目を
f31、f32、f33、f34、f35、f36、f37、f38、g31、g32に
4番目を
f41、f42、f43、f44、f45、f46、f47、f48、g41、g42に
変更します。漏れなく行ってください。
特に、g1とg2はたくさん出てきますので、注意して下さい。
置換を利用して変更された方がミスがないかもしれません。
例えば、g1をg31に変更するとき、g1をドラッグで範囲してして、メニューバーの編集→置換を選びます。
e
置換後の文字列にg31と入力して、置換ボタンを画面zを見ながら押していきます。

画面を見ながらというのは、
c
このg2は4番目のg2ですので、ここに来たら置換後の文字列はg42に変更してから置換ボタンを押さなければならないからです。


すべて注意深く変更されたら、
Alt+F11でエクセルに戻り、
p
上書き保存をして、再度開いてください。オプションは、『不明なコンテンツから保護する』
を選び、各ボタンのオブジェクト名が
3,1,2,6,4,5,9,7,8,10,11(すべてCommandButtonが付く)の順にならでいるか確認して下さい。
もしこの順に並んでいなければ、ドラッグでこの順に並び替えCaptionを使い、表示名が
1学期データ作成、1学期成績処理、1学期データ処理、 2学期データ作成、2学期成績処理、2学期データ処理、
3学期データ作成、3学期成績処理、3学期データ処理、年間成績処理、年間データ消去
の順になるようにしてください。オブジェクトが3,1,2,6,4,5,9,7,8,10,11に並び、ボタン名が
q
となったら上書き保存をして、再度開きます。今度は、コンテンツを有効にしてください。
(いろいろやってみたけどうまくいかなかったという方は、 参考ファイル成績一覧表マクロ(シート1枚版)暫定を開いてファイル名を付けて保存しておきましょう。)
各ボタンを押して動作確認をします。

ただし、2学期以降の各ボタンは動きますが、すべて1学期成績一覧表の部分にデータが出てしまします。
例えば、
Private Sub CommandButton6_Click()

  Dim i As Byte, j As Byte

  For i = 1 To 40
    For j = 1 To 5
      Cells(6 + i, 1 + j) = Int(100 * Rnd())
    Next
  Next

End Sub

のCells(6 + i, 1 + j)の6のところを変更していないからです。これらを適切に変更すれば、正しい位置にそれぞれのデータが表示されるようになります。
では皆さん、挑戦しましょう。



第2話へ 第4話へ

004
  


VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る