上に中和滴定のフローチャートを示しました この中で溶液の色を判断する部分があります このような判断はプログラムではどのように行うのでしょうか 判断に使う命令は IF 文を使います IF は英語で もし何々なら という意味になります
条件判断条件判断には次の命令を使います If 条件式 1 Then ElseIf 条件式 2 Then ElseIf 条件式 3 Then 実行文群 1 実行文群 2 実行文群 2 Else End IF 判断文は条件式が満足されている場合 ( 真 ) にすぐ次の実行文を実行し それ以外は実行せずに EndIf に飛び If 文を終了します 具体的には次のようになります 実行文群 n Sub test30() Dim x As Double x = InputBox("x に数値を入力してください ") If x < 0 Then MsgBox "x は負の数です " ElseIf x < 10 Then MsgBox "x は 0 以上 10 未満の数です " ElseIf x < 20 Then MsgBox "x は 10 以上 20 未満の数です " Else MsgBox "x は 20 以上の数です " End If
test30 を実行して x に下記の値を入れてみてください x=-1 の場合この場合には最初の文の条件式 (x<0) が満足されます そのため 画面に x は負の数です と表示して終了します x=12 の場合この場合には x<0 は満足しませんからその次の実行文 (MsgBox x は負の数です は実行しません その次の条件式 (x<10) も満足しません そして 3 番目の条件式 (x<20) は満足しますので画面に x は 10 以上 20 未満の数です と表示して終了します x=35 の場合この場合には 3 つの条件式 (x<0, x<10, x<20) のどれも満足しません そのため 一番最後の Else の実行文 ( x は 20 以上の数です を表示 ) を実行します 条件式に用いられる演算記号は次のようなものがあります 記号意味 = 左辺と右辺が等しい > 左辺が右辺より大きい < 左辺が右辺未満 >= 左辺が右辺以上 <= 左辺が右辺以下 <> 左辺と右辺が等しくないまた 条件式を複数つなぐ論理演算子 (And, Or, Not 等 ) も使うことができます 演習 x に数値を入力し x が 0 以下なら x の 2 乗を表示し x が 100 以下なら x の半分の値を表示し x が 100 より大きい時には x は 100 よりおおきなかずです と表示するプログラムを作れ
繰り返しあらゆるプログラム言語には繰り返し命令というのがあります VBA でも同じです コンピュータにとってあるルール ( プログラム ) に沿って繰り返しを行うことは得意なことです VBA では 3 種類の繰り返し命令があります 繰り返す回数や条件が決まっている場合には For Next 命令を使います たとえば 1 から 100 までの 2 乗を計算してセルに表示することを考えましょう 左のフローチャートでは x に数値を 1 個ずつ代入する流れになっていますが これでは同じような命令を 100 個書く必要があります 右のフローチャートでは繰 り返し命令を使いますので命令が簡単になります test31 を実行するとエクセルの表の A 列に 1 から 1 00 まで表示され B 列に 2 乗の値が表示されます くりかえし部分は赤で囲んだ部分です For から Next までの間の命令が繰り返されます For の次に続く部分が何回繰り返すかを意味しています i という変数はカウンタ変数で この値が 1 で始まり 100 まで繰り返すことを意味しています そして Next の次に i とありますが カウンタ変数 i の繰り返し範囲はここまでですということを示しています カウンタ変数はプログラム処理にも使うことができます Sub test31() Dim x As Long Dim x2 As Long Dim i As Integer x = 0 For i = 1 To 100 x = x + 1 x2 = x ^ 2 Cells(i, 1) = x Cells(i, 2) = x2 Next i Cells 命令では行の指定に i を用いています これにより 自動的に表示するセルの行が 1 つずつ増えます
このプログラムを見ると判断文 (IF 文 ) が含まれていません これは For Next 命令自体がその機能を持っているためです For Next 命令 For Next 命令の記述例を示します For カウンタ変数名 = 初期値 To 最終値 Step 増分繰り返すべき命令群 Next カウンタ変数名 For Next 命令では繰り返し回数がわかっている場合に用います カウンタ変数名というのは何回繰り返したかを判定するために用いる変数です ( 必ずしも繰り返し回数とは一致しない ) 上の命令文の意味はカウンタ変数を初期値から初めて 増分ずつ増加させ 最終値になるまで繰り返せということを意 味しています test32 を実行してみてください 右の表のような結果になるはずです この例では i の値が 1 から 1 ずつ増加させ 10 になるまで繰り返しなさい ということを示しています すなわち 10 回繰り返すということです x の値はカウンタ変数 i だけ増加します test33 を実行してみてください 右表の結果が表示されるはずです この例は増分が 2 です その Sub test32() Dim x As Integer Dim i As Integer For i = 1 To 10 Step 1 Cells(i, 1) = i Cells(i, 2) = x x = x + i Cells(i, 3) = x Next i Sub test33() Dim x As Integer Dim i As Integer For i = 1 To 10 Step 2 Cells(i, 1) = i Cells(i, 2) = x x = x + i Cells(i, 3) = x Next i i x(1) x(2) 1 0 1 2 1 3 3 3 6 4 6 10 5 10 15 6 15 21 7 21 28 8 28 36 9 36 45 10 45 55 i x(1) x(2) 1 0 1 3 1 4 5 4 9 7 9 16 9 16 25 ため カウンタ変数 i は 2 づつ増加します もちろんカウンタ変数には明確な数値でなくても初期値と最終値に変数を指定することができます For Next
命令でも繰り返しの回数の途中であっても抜け出すことができます その命令は Exit For です Do.Loop 命令 Do.Loop 命令は Do と Loop で囲まれた範囲の命令をある条件の間繰り返し実行するための命令です その構文には 4 種類あります Do While 条件式 1 繰り返したい命令文 Loop Do Until 条件式繰り返したい命令文 Loop 3 Do 繰り返したい命令文 Loop While 条件式 2 Do 繰り返したい命令文 Loop Until 条件式 4 1~4 の違いは 2 種類あります ひとつは条件式の位置です 条件式が Do の部分に記述されているもの (1 と 3) と Loop の部分に記述されているもの (2 と 4) です この 2 つの違いは条件判定をする位置です test34 と test35 を実行してその差を確認してください 結果が異なるはずです Do Loop 命令では条件判定が行われ その判定が True( 真 ) の場合には繰り返しを行い 偽 (False) の場合には Do Loop 命令を終了します そのため 下のように Do の部分 (test34) に条件判定がある場合には最初から判定が偽の場合には1 回もその繰り返しが実行されません x=-1 Do While x>0 x=x-1 Loop Msgbox x Sub test34() Dim x As Integer x = -1 Do While x > 0 x = x - 1 Loop MsgBox x Sub test35() Dim x As Integer x = -1 Do x = x - 1 Loop While x > 0 MsgBox x 判定が偽のため Do Loop は実行されない x=-1 が表示される
これに対して Loop の部分に条件判定がある場合 (test35) には最低でも1 回はその繰り返しが実行されます x=-1 最低でも1 回は実行さ Do れる x=x-1 Loop While x>0 x=-2 が表示される Msgbox x もう一つの違いは条件判定の部分の While 1 2 と Until 3 4 です これは英語の意味と同じです While : 条件式が真の間繰り返しを実行する Until : 条件式が真になったら繰り返しを終了する 条件式以外でこの繰り返しを終了するには Exit Do という命令があり しばしば if 文と併せて用いられます While Wend 命令 3 つめの繰り返し命令は While Wend 命令です 記述方法を示します While 条件式繰り返すべき命令群 Wend この命令では条件式が成り立っている間は繰り返し続けます 逆に条件式が成立しなくなったら繰り返しの実行が終了します test36 を実行してみてください このプログラムでは4,5 行目で変数を0に初期化しています While Wend の条件式は intadd<=100 なので intadd という変数が 100 以下の時は繰り返します 繰り返し命令では単に intadd の足し算を行っているだけです この繰り返しの中ではカウンタ変数として intadd が用いられています そして Sub test36() Dim intval As Integer Dim intadd As Integer intval = 0 intadd = 0 While intadd <= 100 intval = intval + intadd intadd = intadd + 1 Cells(intAdd, 1) = intadd Cells(intAdd, 2) = intval Wend
intadd=intadd+1 でカウンタを 1 つずつ増加させています そして intadd が 100 まで繰り返しを行い 101 になったときに終了します While Wend 命令ではこれを終了する命令がありません そのため 条件式および条件の変化をきちんと行わないと無限ループ ( いつまでたっても終わらないプログラム ) になってしまいがちです