このページでは、以下の内容について説明しています。
プログラム例の解説
では、第一回の「プログラミングの基本作法(マナー)は」を思い出しながら、「(ある処理) を3回、繰り返す」という超簡単なプログラム例を再び見て行きましょう。
Dim i As Integer
i = 1
Do
If i > 3 Then
Exit Do
Else
(ある処理)
i = i + 1
End If
Loop
Dim i As Integer
先頭の「Dim i As Integer」は『今から「i」という名前の「変数」を使います。その「型」は「整数型」です』…という事を「宣言」する文です。「Dim」と「As」の部分は、VBAでは「こう書いて下さい!」と厳密に決められている部分です。「語源は何だろう?」とか考えずに、この通りに書いてください。
「i」の部分は変数名です。ここで、使用する変数の名前を宣言します。変数名には、好きな名前を使う事ができます。変数の名前に使用できる文字の種類は、プログラミング言語によって異なりますが、先頭に「英字」、2文字目以降に「英字」か「数字」を使っておけば、殆どのプログラミング言語で変数として認識されるはずです。
「Integer」は「整数」という意味です。ここで変数の「型」を宣言します。変数の「型」とは、記憶する情報の「種類」の事です。「Integer(=整数)」と宣言する事で、以後、この変数iを使って整数が記憶できます。整数は、1で割り切れる正または負(マイナス)の数で、…,-3, -2, -1, 0, 1, 2, 3,…などの事です。VBAでは、整数型の変数を使って -32768 ~ +32767 の間の「いずれかの整数値」が記憶できます。変数の「型」には他にも幾つか種類がありますが、この講座では最初は整数型だけを使って行きます。
「=」は、変数に値を記憶させるときに使う記号(演算子と言います)です。小学校で習った算数では「=」はたとえば「1+2=3」と書いて、左の式と右の式は「等しい」事を表しますが、プログラミング言語では「=」は、「左の変数に右の式を記憶させる」事を表します。算数に慣れ親しんだ我々にとっては解り辛いですが、そういうルールなのだと、ここで覚えておきましょう。
ちなみに変数に情報を記憶させた後、後の文で再び「=」を使うことで、別の情報を記憶させる (上書きする)事ができます。
Do~Loop
次の「Do」と、その7行先にある「Loop」はペアになっています。「Do」文と「Loop」文を書くと、間で挟んだ文を繰り返し実行してもらえます。
Do
(処理1)
Loop
たとえば、上記のように書けば、(処理1)を実行した後、再びDo文に戻って(処理1)を実行し、これを無限に繰り返してもらえます。ただし「ある条件になったら繰り返しを止めて欲しい」場合は「Exit Do」を実行してもらえれば、そこで繰り返しのループから抜けて、Loop文の次の行から実行してもらえます。
If~Else~End If
If i > 3 Then
Exit Do
Else
(ある処理)
i = i + 1
End If
状況/条件に応じて「もし~なら~を実行し、そうで無いなら~を実行する」というように、条件に応じて実行する処理を変えて欲しいときは「If~Else~End If文」を使います。
「If i > 3 Then」は「もし変数iが3より大きいなら」という意味です。これが正いなら、コンピューターはIfとElseで囲んだ文を実行し、違うならElseとEnd Ifで囲んだ文を実行します。これにより「Exit Do」文は変数iが4になったときに実行されます。
If の後には以下のような「条件式」を記述します。
- 左辺 = 右辺
- 左辺 <> 右辺
- 左辺 > 右辺
- 左辺 < 右辺
- 左辺 >= 右辺
- 左辺 <= 右辺
- 左辺と右辺が等しいとき
- 左辺と右辺が等しくない(異なる)とき
- 左辺が右辺より大きいとき
- 左辺が右辺より小さいとき
- 左辺が右辺以上(等しいか、より大きい)のとき)
- 左辺が右辺以下(等しいか、より小さい)のとき
ここでまた’=’が出てきました。VBAではIf文で「If i = 3 Then」と書いた場合は、変数iで整数3を記憶するのでは無く「もし変数iが 3と等しいなら」という意味に変わります。同じ’=’という演算子でも、書く場所によって意味が変わるのです。ややこしいですが、VBAで決まっているルールですので、ここで覚えておきましょう。
左辺や右辺には、式を記述します。式には、変数、定数(決まった数のことです)、演算子が記述できます。演算子については、後で説明します。
Else~End If
Else
(ある処理)
i = i + 1
End If
「Else~End If」の間には、(ある処理) と 「i = i + 1」という2つの文が書かれています。(ある処理) は、ここでは仮に日本語で(ある処理) と曖昧に記述していますが、実際にはここで実行して欲しい計算式を記述する事になります。繰り返し実行して欲しい処理をここに記述するのです。
その次の「i = i + 1」は、現在のループ回数を記憶するための文です。iに1を足した値が再度、iに記憶されます。
演算子について
ここで「式」に使用する演算子について説明します。演算子にはいろんな種類がありますが、この講座では四則演算(足し算‘+’、引き算‘-’、掛け算‘*’、割り算‘¥’)に加えて、割り算の余りを求める Modを紹介します。たとえば、整数型の変数iとjがあり、jに13が記憶されていたとします。
このとき「i = j ¥ 3」は、変数jを3で割った結果(商)を記憶するときの指示です。結果は整数型で、余りは切り捨てられます。この例では変数iに商の4が記憶されます。
また「i = j Mod 3」は、変数jを3で割った余り(剰余)を記憶するときの指示です。結果は1になり、iには1が記憶されます。
ちなみに割り算には演算子‘/’ も使えますが、割り切れない場合は商が偶数になるよう、小数点以下の切り上げ、または切り捨てが発生してしまいます。
プログラム例の動き
以上の説明を踏まえ、このプログラムがどういう動きをするか、もう一度、見て行きましょう。説明し易いように、各行頭に行番号を記載しました
1: Dim i As Integer
2:
3: i = 1
4: Do
5: If i > 3 Then
6: Exit Do
7: Else
8: (ある処理)
9: i = i + 1
10: End If
11: Loop
12:
- コンピューターはまず1行目を実行します。ここでは整数を記憶するための変数i を宣言しています。これにより以後、変数i が使用できます。
- 2行目を実行します。空行なので何もしません。
- 3行目を実行します。変数i を使って、最初の値(初期値といいます)として1を記憶します。
- 4行目を実行します。「Do」文ですので、Loop文までの文を繰り返し実行せよ…という指示になります。
- 5行目を実行します。If文ですので、ここに記載された条件式により、その次に実行する行が変わります。
このときの変数iには1が記憶されているので、3より大きいという条件は満たしません。よって次に実行する行はElse文の次の8行目になります。 - 8行目を実行します。ここでは仮に日本語で(ある処理)とだけ記載していますが、ここに実際の計算式を書けば、その式が実行されます。
- 9行目を実行します。ここでは変数iに 1を足した値が変数iに記憶されます。結果、変数iの値は 1から2に変わります。
- 10行目を実行します。End Ifですので、ここでIf~Else~End Ifの条件判定が終わり、次は11行目を実行することになります。
- 11行目を実行します。Loop文ですので、次に実行する行は対応するDo文が書かれている4行目になります。「Do」文ですので、Loop文までの文を繰り返し実行せよ…という指示になります。
・・・というように、一連の処理を繰り返し実行する事になります。このDo~Loopの繰り返しの中で、変数i に記憶した値がどう変化するか見て行きましょう。If文のある5行目の位置で見てみます。
1回目:1
2回目:2
3回目:3
4回目:4で「If i > 3 Then」が正しくなり、次の「Exit Do」文が実行されます。
結果、Do~Loopの繰り返しから抜けて、次は12行目を実行する事になります。
このプログラム例では、変数i を使って値1から3まで数える事で、同じ処理を3回繰り返しましたが、1から10まで数えて10より大きい11でExit Doを実行しても構いません。
演習問題(その1)
では早速、実際にソースプログラムを書いてみましょう。ここで書くのは、以下のようなプログラムです。
- 1+2+3+4+5+…+9+10 というように、1から始めて1大きい値を10まで数えて、全部を足し算していくプログラムです。
- 計算結果は、整数型の変数ans を宣言して、そこに記憶して下さい。
※変数は「Dim 変数名 As Integer」という文を使って、何個でも宣言できます。
ポイント
- このプログラムでも「繰り返し」「条件判定」を使って下さい。
本ページの冒頭でご紹介したプログラム例の中で仮に日本語で(ある処理)と書いたところは、変数と定数を使った「実際の式」に書き換えてください。 - どういう計算を何回、繰り返さないといけないか、考えてください。
実際に自分で計算してみて、どんな計算を繰り返す必要があるか、計算の規則を発見してください。 - 人間と同様、コンピューターも前回の計算結果を「記憶」しておかないと、次回の計算ができません。この点に注意してください。
解答例
Dim i As Integer
Dim ans As Integer
i = 1
ans = 0
Do
If i > 10 Then
Exit Do
Else
ans = ans + i
i = i + 1
End If
Loop