同じ失敗を繰り返してしまう、どうもoReです。
今回は、繰り返し処理(For文)の使い方などを説明していきます。
For文 For To Next
・For ファ ・To トゥゥー ・Next ネェクストゥ
Forは、『~に向かって』という意味みたいです。
Toは、『~の方に』という意味みたいです。
Nextは、『次』という意味みたいです。
For 変数 = 初期値(数値) To 終値(数値) '初期値から終値の方に向かって 'ここに繰り返す処理を書く Next 変数 '←変数は書かなくてもOK
ためしに、繰り返し処理してみましょう。
Sheet1モジュールのHyouziプロシージャ内に書きます。
※Main.showは、コメントアウトしましょう。
コメントアウト?の方→【VBA在庫管理#08】を見てね
↓こう書いてみてください。
Sub Hyouzi()
'Main.show
Dim i As Integer
For i = 1 To 10
MsgBox i
Next i
End sub
シート上のMainフォームを表示させるボタンを押してみましょう。
メッセージが10回表示されましたか?
又、メッセージ内容が1~10へ変更されましたか?
流れとして
↓
という流れです。
・初期値を5にした場合
メッセージが6回表示され、メッセージ内容が5~10へ変更されます。
・初期値を10にした場合
メッセージが1回表示され、メッセージ内容は10と表示されます。
では、初期値を15にした場合は?
処理されません。
これは、初期値がすでに終値を超えているためです。
では、減らす方へ繰り返せないの?
安心してください、ちゃんと出来ます。
・Step ステェプ
Stepは、『歩み』という意味みたいです。
For i = 15 To 10 Step -1
これで減らす方へ繰り返せます。
・増加させる事を『increment インクラァマァントゥ』
・減少させる事を『decrement デェクラァマァントゥ』
というらしいです。
インクリメント(増加) For i = 小さい数値 To 大きい数値 Step 1 ←Step1は省略できる デクリメント(減少) For i = 大きい数値 To 小さい数値 Step -1
Stepの数値も変更できます。
For i = 1 To 10 Step 2と書いた場合
メッセージが5回表示され、
メッセージ内容が1・3・5・7・9と変更されます。
For文からの脱出 Exit
・Exit エグズィトゥ
Exitは、『出ていく』という意味らしいです。
繰り返し処理中、ある条件で繰り返し処理から抜ける場合は、
このExitを使用します。
条件は、お馴染みのIf文を使いましょう。
↓このように書いて確認してみてください。
Sub Hyouzi()
'Main.show
Dim i As Integer
For i = 1 To 10
MsgBox i
If i = 5 Then 'もしiが5だった場合
Exit For 'Forから出ていく
End If
Next i
MsgBox "脱出"
End sub
For文から脱出できましたか?
ついでに、Exit ForをExit Subに変更して確認してみてください。
今度は、メッセージの脱出がでません。
これは、Hyouziプロシージャから抜けているためです。
繰り返し処理は他にもありますが、使う時があれば説明します。
繰り返し処理は怖いよ
繰り返し処理は、間違えると無限に繰り返し処理してしまいます。
無限ループというやつです。
無限ループが発動すると、Excelの操作ができなくなり、
そのままほっとくと、Excelが応答なし(フリーズ)になります。
Excelが応答なしになったら、パソコンの電源を切るか、
タスクマネージャーで強制終了させるかですね。
ググれば、裏技的なものがあるので確認しておいた方がいいかも。
無限ループ発動?と思ったら、処理を中断させるキーを速攻で押します。
※応答なしになってからでは遅い
・Escキーを押す。
もしくは、
・Ctrlキー + Breakキーを押す。
※こっちの方が強いらしい。
※私のノートパソコンは、fnキー + Breakキー
それでは、無限ループを体験してみますか?(笑)
※自己責任でね
↓こう書いて実行
Sub Hyouzi()
'Main.show
Dim i As Integer
For i = 1 To 10
MsgBox i
i = 1 '←ここで無限ループ発動
Next i
End sub
2週目に変数のiに2が入るが、メッセージ表示後に
変数のiに1を入れると、3週目にまた変数のiに2が入ってしまう。
この無限ループコードは、多分応答なしにならないです。
メッセージが表示され、メッセージのOKボタンを押さないかぎり、
プログラムが停止中となるため。
Ctrlキー + Breakキーで脱出してください。
無事脱出できましたか?
それでは、ドMの方用にガチのやつ
↓やるなよ!やるなよ!! 振りじゃないよ!!(笑)
Sub Hyouzi()
'Main.show
Dim i As Integer
For i = 1 To 10
Seet1.cells(i, 1) = i '2週目以降セルA2に無限に2が入る
i = 1 '←ここで無限ループ発動
Next i
End sub
まとめ
Next 変数
For i = 小さい数値 To 大きい数値 Step 1 ←Step1は省略できる
デクリメント(減少)
For i = 大きい数値 To 小さい数値 Step -1
・Exit Sub プロシージャから抜ける
・Escキーを押す。
もしくは、
・Ctrlキー + Breakキーを押す。
次回 在庫管理プログラムに繰り返し処理を使っていくよ
コメント