For文の使い方と無限ループの脱出【VBA在庫管理#15】

Excel VBA 部品在庫管理アイキャッチ画像部品在庫管理

同じ失敗を繰り返してしまう、どうも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へ変更されましたか?

流れとして

変数のi初期値1が入る
②メッセージ内容として変数のiに入っている1を表示
③次に変数のiに2が入る
④メッセージ内容として変数のiに入っている2を表示

    ↓

変数のi終値10になるまで繰り返す

という流れです。

 

初期値を5にした場合
メッセージが6回表示され、メッセージ内容が5~10へ変更されます。

初期値を10にした場合
メッセージが1回表示され、メッセージ内容は10と表示されます。

 

では、初期値を15にした場合は?

oReのぞき見

処理されません。

これは、初期値がすでに終値超えているためです。

では、減らす方へ繰り返せないの?

安心してください、ちゃんと出来ます。

 

・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 ForExit Subに変更して確認してみてください。

今度は、メッセージの脱出がでません。

これは、Hyouziプロシージャから抜けているためです。

繰り返し処理は他にもありますが、使う時があれば説明します。

 

繰り返し処理は怖いよ

繰り返し処理は、間違えると無限に繰り返し処理してしまいます。

無限ループというやつです。

無限ループが発動すると、Excelの操作ができなくなり
そのままほっとくと、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

 

oReのぞき見

まとめ

For 変数 = 初期値(数値) To 終値(数値)
Next 変数
インクリメント(増加)
  For i = 小さい数値 To 大きい数値 Step 1 ←Step1は省略できる
デクリメント(減少)
  For i = 大きい数値 To 小さい数値 Step -1
・Exit For 繰り返し処理から抜ける
・Exit Sub プロシージャから抜ける
処理を中断させるキー
・Escキーを押す。
もしくは、
・Ctrlキー + Breakキーを押す。

oRe腕立て

次回 在庫管理プログラムに繰り返し処理を使っていくよ

ExcelVBA部品在庫管理【目次】へ戻る

コメント

タイトルとURLをコピーしました