フローチャート
前回は条件文について記載しました(前回の記事)。今回はループについて解説します。条件文と同じくよく使うので、しっかりマスターしたい内容です。それでは条件文で使用した例題をベースにやっていきたいと思います。
前回の課題は「120円の缶コーヒーを手持ちのお金1,000円で帰りの電車賃200円が残るなら買う」と言う内容でした。ここにループを加えるため課題を少し変更します。新しい課題は「120円の缶コーヒーを手持ちのお金1,000円で帰りの電車賃200円を残して買えるだけ買う」です。缶コーヒーを買う度に現在何本買ったのかを出力しましょう。
ループのやり方は幾つかありますが、よく使うやり方を紹介します。下図がフローチャートです。

コード
以下がコードです。
int coffee = 120;
int val = 1000;
int fare = 200
if (val >= coffee + fare)
{
for (int i = 1; i <= (val - fare) / coffee; i++)
printf (“%d本目\n , i);
}
else
puts (“諦めた”);
別のやり方を紹介します。(パターン2)
int coffee = 120;
int val = 1000;
int fare = 200
int i = 1;
if (val >= coffee + fare)
{
while ((val - (coffee * i)) > fare)
{
printf (“%d本目\n , i);
i++;
}
}
else
puts (“諦めた”);
前者のループは缶コーヒーが何本買えるか先に計算して、買える本数分のループをするのに対して、後者は所持金額が電車賃以上の時は缶コーヒーを買い続けるループをしています。i++はインクリメントと言ってiの変数が一つずつ増えていくイメージです。i = i + 1と同じです。
VBAの場合は
Dim coffee As Integer
Dim val As Integer
Dim fare As Integer
Dim i As Integer
coffee = 120
val = 1000
fare = 200
If (val >= coffee + fare) Then
For i = 1 To Int((val - fare) / coffee)
MsgBox i & "本目"
Next i
Else
MsgBox "諦めた"
End If
VBAの使いにくいところなんですが、9行目のInt((val – fare) / coffee)ですがiを整数型で宣言しているのに割りれない数字は切り捨てられず小数点に勝手に変換されてしまいます。なのでInt()で小数点を切り捨てます。こういうところがC言語と比較するとやりにくい・・・
ループは色々なやり方があるのでどう使い分けたら良いか悩むかもしれません。個人的によく使うのは例題に挙げたfor文です(VBAはFor Eachをよく使う)。for文のループだけでも色んなプログラムを組むことができます。
ルーチン化した人の作業をプログラムで表現する時、ループは必ず使います。またループの中にループを入れる多次元ループもよく使います。まずは1つのループで慣れていきましょう。