アクセス担当のまみです。
繰り返し処理ってとっても便利ですね。
コードが短くなって見やすくなるし、指定した回数ずっと繰り返してくれる。
だけど、条件が整った場合にはループから抜けてほしい時ってあったりしませんか?
どうすればループから抜け出せるんだろう?
そんな時は、どんな条件になったらループを抜けたいかって書いてあげればいいんです。
今回は、条件が整ったら繰り返し処理を終わらせるって方法をお伝えしますね。
Contents
ファイルを準備しよう
今回、説明のために「営業日報」ファイルを使用します。
同じファイルが手元のあると理解しやすいので、下記の記事からぜひ作成してみてくださいね!
まずは「営業日報」ファイルを開きましょう。
必須項目チェックを利用する
「営業日報」ファイルの今の状態だと、5行全部入力していないとうまく登録できません。
3行目までしかデータがない状態で登録すると商品名と数量が空欄のまま登録されてしまいます。
何行目までデータがあるかわからないけれど、商品名と数量が入力されなくなったらそこでデータが登録されるようにしたいですね。
データを登録する前に必須項目チェックを利用して、何行目まであるのか調べるとうまくいきます。
実際にコードを追加してみましょう。
Dim j As Integer Dim s As Integer ' 必須項目のメッセージボックス If Me.cmb部課名 = "" Then MsgBox "所属が選択されていません" Me!cmb部課名.SetFocus Me.cmb部課名.BackColor = 12695295 Exit Sub Else Me.cmb部課名.BackColor = vbWhite End If If Me.cmb氏名 = "" Then MsgBox "氏名が選択されていません" Me!cmb氏名.SetFocus Me.cmb氏名.BackColor = 12695295 Exit Sub Else Me.cmb氏名.BackColor = vbWhite End If If Me.cmb商品名1 = "" Then MsgBox "商品名が選択されていません" Me!cmb商品名1.SetFocus Me.cmb商品名1.BackColor = 12695295 Exit Sub Else Me.cmb商品名1.BackColor = vbWhite End If If Me.tx数量1 = "" Then MsgBox "数量が入力されていません" Me!tx数量1.SetFocus Me.tx数量1.BackColor = 12695295 Exit Sub Else Me.tx数量1.BackColor = vbWhite End If For j = 1 To 5 If Me.Controls("cmb商品名" & CStr(j)) = "" And Me.Controls("tx数量" & CStr(j)) = "" Then Exit For Else If Me.Controls("cmb商品名" & CStr(j)) = "" Then MsgBox "商品名が選択されていません" Me.Controls("cmb商品名" & CStr(j)).SetFocus Me.Controls("cmb商品名" & CStr(j)).BackColor = 12695295 Exit Sub Else End If If Me.Controls("tx数量" & CStr(j)) = "" Then MsgBox "数量が入力されていません" Me.Controls("tx数量" & CStr(j)).SetFocus Me.Controls("tx数量" & CStr(j)).BackColor = 12695295 Exit Sub Else End If End If Next j s = j - 1
コードをコピーされたい場合は下記の記事を参考にしてください。
繰り返し処理を抜ける
入力が必須な項目は「cmb部課名」「cmb氏名」「cmb商品名1」「tx数量1」 なので、空欄の場合にはメッセージボックスを表示して、それ以上進めないようにします。
必須項目チェックについての詳細は下記の記事をどうぞ!
cmb商品名2~5とtx数量2~5はどちらかに入力があって、どちらかに入力がない場合にメッセージボックスを表示するようにしています。
条件 Me.Controls(“cmb商品名” & CStr(j)) = “” And Me.Controls(“tx数量” & CStr(j)) = “”を満たしたら繰り返し処理を抜けるように変数jを使用してループさせて、何行目まであるかを調べます。
「Exit For」は「For j = 1 To 5」から「Next j」までの処理の中を条件を満たした時にForの処理を途中で抜けて次の処理に進みます。
「Exit Sub」は登録ボタンクリック時の処理が「Sub」からはじまって「End Sub」で終わるので、条件を満たしたときにSubの処理を途中で抜けるってことは、そこで処理が止まって次には進まないってことです。
条件を満たしたら、ループを抜けるので、変数jの値から1を引いて変数sに入れておきます。
何行目までデータがあるのかってわかったので、「For i = 1 To 5」を「For i = 1 To s」に変えておきましょう!
あとは、クリア処理に「.BackColor = vbWhite」を追加しておきましょう。
データ登録後のクリア処理
クリアボタンの処理
フォーム①■を選択した状態で、プロパティーシートの②「イベント」タブから読み込み時にイベントプロシージャを選択してコードの画面を表示させます。
「Private Sub Form_Load()」と「End Sub」の間に下記のコードを追加しましょう。
Dim clear As Control On Error Resume Next For Each clear In Me.Controls With clear If .ControlType = acTextBox Or acComboBox Then .Value = "" .BackColor = vbWhite End If End With Next clear
これで空欄が登録されることはなくなりました。
しっかり動作確認してみてくださいね!
まとめ
同じ処理は繰り返してほしいけど、途中で抜けたい時もあるんです・・・
そんな時に、抜けられる方法がわかっていると、プログラムの幅が広がりますね。