VBAによるプログラミング超入門講座(第2回)

By | 2015年7月27日

このページでは、以下の内容について説明しています。

プログラム例の解説

では、第一回の「プログラミングの基本作法(マナー)は」を思い出しながら、「(ある処理) を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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です