- 締切済み
この構文を解説して欲しい
Private Sub 問題印刷_V_Click() Dim ID_N(2000) As Long '問題ID Dim ID_F(2000) As Boolean '選択済みフラグ Dim ID_P(20) As Integer '選択された問題 Dim I As Integer Dim MF As Boolean '選択マッチング中 Dim CT As Integer 'データカウンタ Dim MAX_V As Integer '問題数 Dim S_N As Integer '選択ID Dim DbsCurrent As Database, rstEmployees As Recordset For I = 1 To 2000 ID_F(I) = False Next Set DbsCurrent = CurrentDb Set rstEmployees = DbsCurrent.OpenRecordset("ST_算数計算テスト", dbOpenTable) rstEmployees.Index = "選択キー" '学年+階級+階級区分+レベル rstEmployees.MoveFirst '最初のレコードに移動 MF = False 'マッチングフラグは、最初は偽 CT = 0 Do If rstEmployees.EOF Then Exit Do 'レコード終了 If rstEmployees!学年 = 学年_V And rstEmployees!階級 = 階級_V And rstEmployees!階級区分 = 段_V And rstEmployees!レベル = レベル_V Then MF = True CT = CT + 1 ID_N(CT) = rstEmployees!ID Else If MF = True Then Exit Do End If rstEmployees.MoveNext Loop rstEmployees.Close If CT = 0 Then MsgBox "問題がありませんでした", 0, "問題未登録エラー": Exit Sub If [5_V] Then MAX_V = 5 If [10_V] Then MAX_V = 10 If [20_V] Then MAX_V = 20
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Mizyu
- ベストアンサー率41% (245/593)
>For I = 1 To 2000 >ID_F(I) = False >Next ID_F配列の1~2000すべてにFalseを入れています。(初期化) >Set DbsCurrent = CurrentDb >Set rstEmployees = DbsCurrent.OpenRecordset("ST_算数計算テスト", dbOpenTable) CurrentDb(どこかにグローバル定数(もしくは変数)としてあるDB)を開いてST_算数計算テストテーブルを開いています。 >If rstEmployees.EOF Then Exit Do 'レコード終了 >If rstEmployees!学年 = 学年_V And rstEmployees!階級 = 階級_V And rstEmployees!階級区分 = 段_V And >rstEmployees!レベル = レベル_V Then >MF = True >CT = CT + 1 >ID_N(CT) = rstEmployees!ID >Else >If MF = True Then Exit Do >End If >rstEmployees.MoveNext >Loop かいつまんで言うと「ST_算数計算テーブルの中の学年、階級、階級区分、レベルが_Vのついている変数(定数)と一致する」、もしくは「レコードをすべて検索し終わったとき」にループを抜けます。一致するものがあった場合には MFをTrueに変更 >If CT = 0 Then MsgBox "問題がありませんでした", 0, "問題未登録エラー": Exit Sub >If [5_V] Then MAX_V = 5 >If [10_V] Then MAX_V = 10 >If [20_V] Then MAX_V = 20 ここについては、この関数の仕様の意味、MAX_Vだとか5_Vの意味がわからないため、説明しきれません。 (ただのIF文なので詳細の説明は割愛します)