(1)for 文
予め繰り返し回数が決まっている処理の場合,
for文 によって繰り返し指定を行うことができる.ループ変数の値は,はじめは初期値式の値で,終値式の値を超えるまで増分式の値ずつ増加させつつループ本体を繰り返し処理する.Setp以降の増分式は省略可能であり,省略した場合,増分量は1となる.
(for文)
For ループ変数=初期値式 To 終値式 Step 増分式
(ループ本体)
Next ループ変数
以下の例(1)は,初期値が1,終値が5,増分値が2の場合で,ループ変数Iの値は1,3,5の3つの値をとる.一方,(2)は初期値が5で,終値が1,増分値が-2であるから,ループ変数Iの値は5,3,1となる.このように,(1)と(2)では同じように,ループ本体の処理を3回繰り返すことができるが,ループ変数Iの値が異なる.
(1) For I = 1 To 5 Step 2 → ( I : 1, 3, 5 )
(2) For I = 5 To 1 Step -2 → ( I : 5, 3, 1 )
増分値が1の場合は,以下のように,増分値を省略することができる.ただし,増分値として0を指定することはできない.
For I = 1 To 5 Step 1 → For I = 1 To 5
プログラム例4-1: 初期値を1とし増分を2として,num1の値を1~5まで繰り返し,ループ変数の値を加えるプログラムを作成する.
①「1-5節(1)」 の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
②(プログラム例4-1 )を入力する.
③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
④ ボタンをクリックすると,セルA1に9が表示される.
(プログラム例4-1)
Private Sub CommandButton1_Click()
Dim num1 As Integer, sum As Integer
sum = 0
For num1 = 1 To 5 Step 2
sum = sum + num1
Next num1
Range("A1").Value = sum
End Sub
このプログラムのnum1は,1,3,5と変化し,3回繰り返される.1回目の繰り返しでは,表4-1 のように,sumの値が0,num1の値が0であるから,それらを加えた新しいnumは1となる.2回目の繰り返しでは,sumが1で,num1が3なので,新しいnumはその和4である.さらに,3回目の繰り返しでは,sumが4,num1が5であるので,新しいsumはこれらの和9となる.
表4-1
繰り返し回数 num1 sum = sum + num1
1 1 sum = 0 + 1 = 1
2 3 sum = 1 + 3 = 4
3 5 sum = 4 + 5 = 9
(2)for文の入れ子
またif文の場合と同様に,for文でも
入れ子 を設けることができる.この場合,内側のループ変数2と外側のループ変数1が同一であってはならない.また,内側と外側が交差するようなループを設けることもできない.繰り返しは,内側のループが先に規定回数だけ繰り返され,外側のループがカウントアップして,再度繰り返される.内側のループが入れ子においても,Setp以降の増分式は省略可能であり,省略した場合,増分量は1となる.
(入れ子のあるfor文)
For ループ変数1=初期値式 To 終値式 Step 増分式
……
For ループ変数2=初期値式 To 終値式 Step 増分式
……
Next ループ変数2
……
Next ループ変数1
プログラム例4-2: 入れ子のあるループのループ変数の値を表示するプログラムを作成する.
①「1-5節(1)」 の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
②(プログラム例4-2 )を入力する.
③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
④ ボタンをクリックすると,セルのA欄にnum1の値が,B欄にnum2の値が表示される.以下に,実行結果を示す.
(プログラム例4-2)
Private Sub CommandButton1_Click()
Dim num1 As Integer, num2 As Integer, num3 As Integer
num3 = 0
For num1 = 1 To 2
For num2 = 1 To 3
num3 = num3 + 1
Cells(num3,1).Value = num1
Cells(num3,2).Value = num2
Next num2
Next num1
End Sub
(プログラム例4-2の結果)
実行結果からも理解できるように,はじめに,内側のループが3回繰り返され,B欄にnum2の値が1~3まで表示される.この間,A欄のnum1の値は,1のままである.num2が3回繰り返されると,num1の値が2にカウントアップされ,再び,内側のループが3回繰り返され,num2の値が1~3まで表示される.
(1)Do While 文
繰り返し回数が事前に分かっておらず,ある条件を満足している間,繰り返し処理を実行する場合,
Do While文 を利用することができる.Do While文は与えられたスカラ理論式が真の間,端末文のLoop との間に挟まれたループ本体の実行文を処理し,偽になるとループから抜け出る.
(Do While文)
Do While 論理式
(ループ本体)
Loop
プログラム例4-3: numの値が3より小さい時(3未満),numの値に1を加え続けるプログラムを作成する.
①「1-5節(1)」 の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
②(プログラム例4-3) を入力する.
③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
④ ボタンをクリックすると,セルのA欄にnumの値が1~3まで表示される.以下に実行結果を示す.
(プログラム例4-3)
Private Sub CommandButton1_Click()
Dim num As Integer
num = 0
Do While num < 3
num = num + 1
Cells(num, 1).Value = num
Loop
End Sub
(プログラム例4-3の結果)
(2)Do Until 文
Do While文と同様,繰り返し回数が事前に分かっていない場合の繰り返し処理の方法として,
Do Until文 がある.この方法は,Do While文とは逆に,ある条件を満足するまで繰り返し処理を実行する方法である.すなわち,Do Until文は与えられたスカラ理論式が偽の間,端末文のLoop との間に挟まれたループ本体の実行文を処理し,真になるとループから抜け出る.
(Do Until文)
Do Until 論理式
(ループ本体)
Loop
プログラム例4-4: numの値が3より大きくなるまで(3以上),
numの値に1を加え続けるプログラムを作成する.
①「1-5節(1)」 の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
②(プログラム例4-4 )を入力する.
③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
④ ボタンをクリックすると,セルのA欄にnumの値が1~4まで表示される.
以下に実行結果を示す.
(プログラム例4-4)
Private Sub CommandButton1_Click()
Dim num As Integer
num = 0
Do Until num > 3
num = num + 1
Cells(num, 1).Value = num
Loop
End Sub
(プログラム例4-4の結果)
(3)Exit Do 文
Doの後ろに何も付けず,(Do ~ Loop)を構成する繰り返し処理は,無限に繰り返しが行われ,繰り返し処理から抜け出せなくなる.このような無限ループから抜け出す方法として,強制的に繰り返し処理を終了させる
Exit Do 文 がある.Exit Do文は,通常,If文などと同時に利用されることが多い.また,ForループやDo Whileループ,Do Untilループからの抜けだしにも使われる.
(Exit Do 文)
Do
……(処理)
Exit DO
……(処理)
Loop
プログラム例4-5: A列に記載された数字から0の行を見つけ,その行番号をセルB1に表示するプログラムを作成する.
①「1-5節(1)」 の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
②(プログラム例4-5 )を入力する.
③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
④ 予め,A列に0を含む数値を記載しておき,ボタンをクリックすると,
はじめに見つけた0の行番号をセルB1に表示して無限ループが終了する.
以下に実行結果を示す.
(プログラム例4-5)
Dim num As Integer, n As Intege
n = 0
Do
n = n + 1
num = Cells(n, 1).Value
If num = 0 Then
Exit Do
End If
Loop
Range("B1").Value = n
End Sub
(プログラム例4-5の結果)