ラベルを配列化させたタイピング

☆正解、不正解を表示
■フォームにラベルを2個貼り付ける。↓


■Label1をクリックしオブジェクトプロパティでオブジェクト名をlblmondaiと変更させる。↓


■同じようにLabel2のオブジェクト名をlblhanteiと変更させる。

■コードを書き込む。↓
'フォームを表示するとき
Private Sub Form_Load()
   '乱数初期化
   Randomize
   lblmondai.Caption = "A"
End Sub
'フォーム上でキーが押された時
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   'もしlblmondai.Captionと押したキーが同じとき
   If lblmondai.Caption = Chr(KeyCode) Then
      'lblmondai.Capti
onにA~Zまでの乱数を代入する
      lblmondai.Caption = Chr(Int(Rnd(1) * 26) + 65)
      '正解を代入する
      lblhantei.Caption = "正解"
   
'lblmondai.Captionと押したキーが違うとき
   Else
      '不正解を代入する
      lblhantei.Caption = "不正解"
   End If
End Sub


(解説)緑で書き込まれたコードはコメントで実行プログラムからは無視される。各コード説明はコメントに記入している。

■プログラムを実行する。↓


(解説)Pと表示されているにもかかわらず違うキーを押したので不正解と表示された。もちろんPと押すと正解と表示される。

☆正解数を表示させる。
■フォームに点数ラベルを貼り付けオブジェクト名をlbltensuu、Captionを0と変更する。↓
  

■コードを書き換える。↓
Private Sub Form_Load()
   Randomize
   lblmondai.Caption = "A"
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If lblmondai.Caption = Chr(KeyCode) Then
      lblmondai.Caption = Chr(Int(Rnd(1) * 26) + 65)
      lblhantei.Caption = "正解"
      'lbltensuu(点数)に1プラスする。
      lbltensuu.Caption = lbltensuu.Caption + 1
   Else
      lblhantei.Caption = "不正解"
   End If
End Sub

■開始ボタンを押し実行させる。↓


(解説)正解数が22で表示されている。

∵ダウンロード file1.zip

☆問題ラベル(lblmondai)を配列化させる
■lblmondaiをクリックし一文字サイズに小さくする。↓


■lblmondaiを右クリックしてコピー、貼り付けする。すると、既に同じ名前のコントロール’lblmondai’があります。コントロール配列にしますか?と表示されるので「はい」をクリックする。↓


■コピーしたラベルを最初のラベルの右に移動させる。↓


■繰り返してコピー貼り付けしていき10個並べる。↓


(解説)これでラベルの配列化が行われた。

■それぞれのlblmondaiをクリックしオブジェクトプロパティのオブジェクト名とindexを確認する。↓


(解説)オブジェクト名は同じlblmondaiだがIndexが0~9までの数字となっているはず。それぞれのラベルはindexで区別する
(解説)オブジェクトプロパティの配置が違うのは項目別で見ているため。

■lblmondaiラベルのIndexを右から0~9の順番に配置する。

   0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9  ←Index

■コードを書き換える。↓
Private Sub Form_Load()
   Randomize
   
'For~Nextの間をi=0から+1づつしていき9になるまで繰り返す(計10回繰り返す)
   For i = 0 To 9
      
'lblmondai(i).CaptionにA~Zまでの乱数を代入する
      lblmondai(i).Caption = Chr(Int(Rnd(1) * 26) + 65)
   Next i
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   
'もしlblmondai.Captionと押したキーが同じとき
   If lblmondai(lbltensuu.Caption).Caption = Chr(KeyCode) Then
      
'lblmondai(番目)を非表示にする。Visibleは表示、非表示を設定するもの(表示はTrue)
      lblmondai(lbltensuu.Caption).Visible = False
      lblhantei.Caption = "正解"
      lbltensuu.Caption = lbltensuu.Caption + 1
   
'lblmondai.Captionと押したキーが違うとき
   Else
      lblhantei.Caption = "不正解"
   End If
End Sub


(解説)For~Nextでの決まった変数を必要としない繰り返しでは「i」や「j」などが一般的に使われる。
(解説)lblmondaiの配列化に伴いlblmondai(Index)のようにして各ラベルを指定する。例えばlblmondai(1)はlblmondaiのIndex=1のラベルを示している。

■開始ボタンを押し実行する。↓


(解説)正解した文字は消えていく。

∵ダウンロード file2.zip

☆打ち切り終えたら問題を再表示する。サブルーチンを使い行う。
■コードを書き換える。↓
Private Sub Form_Load()
   Randomize
   
'prirndサブルーチンを呼び出す。呼び出すときはCall関数を使う。
   Call prirnd
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   
'もしlblmondai.Captionと押したキーが同じとき
   If lblmondai(lbltensuu.Caption).Caption = Chr(KeyCode) Then
      'lblmondai(番目)を非表示にする。
      lblmondai(lbltensuu.Caption).Visible = False
      lblhantei.Caption = "正解"
      lbltensuu.Caption = lbltensuu.Caption + 1
      
'点数が10になったときprirndサブルーチンを呼び出す
      If lbltensuu.Caption = 10 Then Call prirnd
   
'lblmondai.Captionと押したキーが違うとき
   Else
      lblhantei.Caption = "不正解"
   End If
End Sub
'サブルーチン名前がprirnd←自由な名前でOK
Private Sub prirnd()
   
'For~Nextの間をi=0から+1づつしていき9になるまで繰り返す(計10回繰り返す)
   For i = 0 To 9
      
'lblmondai.CaptionにA~Zまでの乱数を代入する
      lblmondai(i).Caption = Chr(Int(Rnd(1) * 26) + 65)
      
'lblmondai(i)を表示する
      lblmondai(i).Visible = True
      
'点数を0にする
      lbltensuu = 0
   Next i
End Sub


(解説)prirndサブルーチンは自分で作ったサブルーチンなので名前は何でもOK。4行目、14行目、21行目のprirndの名前を変えても実行できる。

■開始ボタンを押し実行する。
(解説)10個押し終わると、再表示される。

∵ダウンロード file3.zip

☆配列を200まで増やす
■フォーム上のラベルのサイズを小さくしlblmondaiを200個ほどコピー貼り付けで作成する。左上のIndexを1、右上を19、次の段の左を20として、最後は199。↓


(解説)オブジェクトプロパティでIndexがきちんと順になっているか確かめられる。

■コードを書き換える。↓
Private Sub Form_Load()
   Randomize
   
'prirndサブルーチンを呼び出す。呼び出すときはCall関数を使う。
   Call prirnd
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   
'もしlblmondai.Captionと押したキーが同じとき
   If lblmondai(lbltensuu.Caption).Caption = Chr(KeyCode) Then
      
'lblmondai(番目)を非表示にする。
      lblmondai(lbltensuu.Caption).Visible = False
      lblhantei.Caption = "正解"
      lbltensuu.Caption = lbltensuu.Caption + 1
   
'lblmondai.Captionと押したキーが違うとき
   Else
      lblhantei.Caption = "不正解"
   End If
End Sub
'サブルーチン名前がprirnd←自由な名前でOK
Private Sub prirnd()
   
'For~Nextの間をi=0から+1づつしていき199になるまで繰り返す(計200回繰り返す)
   For i = 0 To 199
      
'lblmondai.CaptionにA~Zまでの乱数を代入する
      lblmondai(i).Caption = Chr(Int(Rnd(1) * 26) + 65)
      
'lblmondai(i)を表示する
      lblmondai(i).Visible = True
      
'点数を0にする
      lbltensuu = 0
   Next i
End Sub

(解説)prirndサブルーチンはForm_Loadでしか呼び出されていないが英単語をラベルに割り当てるコードとしてサブルーチンで区切ったほうが分かりやすい。

■開始ボタンを押し実行する。↓


∵ダウンロード file4.zip

☆固定英単語をタイピングする
■コードを書き換える。↓
'配列化した変数を(0~9)まで10個宣言する。As Stringとは変数wordに入れる物が文字限定であることを示す。
Dim word(9) As String
Private Sub Form_Load()
   Randomize
   Call prirnd
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  'もしラベルに"_"が表示されているとき、スペースを押したとき正解となるようにする。スペースのKeyCodeは32
   If lblmondai(lbltensuu.Caption).Caption = "_" And KeyCode = 32 Then
     'priseikaiサブルーチンを呼び出す。
      Call priseikai
   Else
      'prifuseikaiサブルーチンを呼び出す。
      Call prifuseikai
   End If

   '正解のとき
   If lblmondai(lbltensuu.Caption).Caption = Chr(KeyCode) Then
      'priseikaiサブルーチンを呼び出す。
      Call priseikai
   '不正解のとき
   Else
      'prifuseikaiサブルーチンを呼び出す。
      Call prifuseikai
   End If
End Sub
'ワードをラベルに配置する
Private Sub prirnd()
   '配列化した変数にワードを入れる
   word(0) = "EVERY"
   word(1) = "HELLO"
   word(2) = "CHOOCE"
   word(3) = "BASIC"
   word(4) = "BANK"
   word(5) = "TRY"
   word(6) = "STUDY"
   word(7) = "BLACK"
   word(8) = "LIVE"
   word(9) = "PLAY"
   'wordsにランダムに選んだwordを繋げながら入れる。単語の最後に"_"を入れる
   For i = 0 To 70
      words = words + word(Int(Rnd(1) * 10)) + "_"
   Next i
   
'For~Nextの間をi=0から+1づつしていき199になるまで繰り返す(計200回繰り返す)
   For i = 0 To 199
      
'lblmondai.Captionにwordsの先頭から(i+1番目)の文字を1文字入れる。
      lblmondai(i).Caption = Mid(words, i + 1, 1)
      'lblmondai(i)を表示する
      lblmondai(i).Visible = True
      '点数を0にする
      lbltensuu = 0
   Next i
End Sub

■開始ボタンを押し実行する。↓


(解説) 画面上の"_"はスペースキーで入力できる。コードの9行目で処理している。

∵ダウンロード file5.zip