よく使うステートメント

【For ~ Next】指定した数だけ処理を繰り返す

 同じ処理繰り返して実行するとき、その繰り返しの記述にはいくつかの方法があります。
ここでは指定した回数だけ処理を繰り返す「For ~ Next」について説明します。

この処理では繰り返しの回数を表すのに変数(カウンタ変数)を使用します。

 また、ただ単に「指定した回数だけ処理を繰り返す方法」の他、「一つおきに処理を繰り返す方法」「繰り返しの処理を途中で抜け出す方法」も合わせて説明します。

またこの「評価欄」を全て白紙の戻す(クリアにする)方法を For ~ Next 文で書くと次のようになります。

 

指定した回数だけ処理を繰り返す

 30人の生徒の5教科の定期テストの点数一覧です。
合計点数の
400点以上 ➧ A評価(=>400)
300点以上 ➧ B評価(=>300 / <400)
300点未満 ➧ C評価(<300)

Sub 評価処理()
 Dim I As Integer   ‘①
 Dim M As Integer   ‘②

 For I = 1 To 30    ‘③
  M = Cells(I + 2, 9).Value ‘④

  If M >= 400 Then ‘⑤
   Range(“J” & I + 2) = “A” ‘⑥
  Elsey M >= 300 And M < 400 Then
   Range(“J” & I + 2) = “B”
  Else
   Range(“J” & I + 2) = “C”
  End If
 Next I ‘③
End Sub

① 繰り返しの回数を I という変数にしている
② 各人の合計点を M という変数にしている
③ この For とNext の間の処理を30回繰り返す
④ 合計点を M に代入している
⑤ 条件(合計点が400点以上の時)
⑥ 評価欄に評価(A・B・C)を書き出す

③ の I は最初の For ~ Next の間は 1、次の For ~ Next は 2 と30になるまで変化します。

セルの Cells や Range は下を参照してください。

セルの位置を指定するプロパティ Range と CellsExcel はセルにいろいろなデータを書き込みます。 しかしExcelには 行数が1,048,576 、列数が16,384 ありま...

If ~ Else の条件文は下記を参照してください。

【If ~ Then】 条件によって処理が分かれるとき 生活の中でも「明日晴れたら外出、雨なら家で読書しよう」といった、条件によってやることが分かれることはよくあります。 こうした条件...

この評価欄をクリア(空欄)に戻す処理を For ~Next 文で書くと次のようになります。

Sub クリア()
 Dim I As Integer
 
 For I = 1 To 30
  Cells(I + 2, 10) = “”
 Next I
End Sub

一つおきに処理を実行する方法

 10人の生徒の5教科の定期テストの点数一覧です。
合計点の下に5教科の平均点を書き込むことにします。
書き込む欄は1行おきになっていますので、それに合わせた For ~ Next 文になります。

Sub 平均点表示()
 Dim I As Integer  ‘①
 Dim P As Single  ‘②

 For I = 1 To 20 Step 2  ‘③
  P = Cells(I + 2, 9)  ‘④
  P = Round(P / 5, 1)  ‘⑤
  Cells(I + 3, 10) = P  ‘⑥
 Next I  ‘③
End Sub

① 繰り返しの回数を I という変数にしている
② 平均点を P という変数に。少数第1位なので 変数の型はSingle。
③ 20行繰り返すけど1行おきなので Step 2 が入る
④ 一旦合計点をPに代入
⑤ 合計点Pの平均点を計算しその結果を、左辺Pに代入
⑥ それぞれの行に平均点を記入

⑤の平均点は四捨五入の関数を使用。右辺で合計点Pを5で割って少数第1位で四捨五入。
この平均点を左辺に代入するのでPは合計点から平均点に変わります。

 数字を四捨五入するときは「Round」を使います。
上記の例では5教科の合計点を5で割って(P/5)、次の「1」は少数第1位で表示するという意味です。
すなわち小数点以下が続く場合は、少数第2位を四捨五入して少数第1位で表示するという意味になります。

「右辺を左辺に代入する」は下記を参照してください。

【n=n+1】プログラミングで重要な計算式VBA でプログラミングするときによく使われる計算式があります。 n = n + 1 この等式は「数学」ではありえない等式で...

繰り返しを途中で抜ける

 繰り返しの処理の途中である条件が成立した場合、その繰り返し処理から抜け出ることができます。

 ある会場の1月1日から25日までの入場者数を記録したデータです。
累計で5000人を超えたところで、その右側に累計数を表示させることにします。

Sub 入場者カウント()
 Dim TL As Integer  ‘①
 Dim SS As Integer  ‘②
 Dim I As Integer  ‘③

 TL = 0  ‘④

 For I = 1 To 25  ‘⑤
  SS = Cells(I + 2, 3)  ‘⑥
  TL = TL + SS  ‘⑦

  If TL > 5000 Then Exit For ‘⑧
 Next I ‘⑤

 Cells(I + 2, 4).Value = TL ‘⑨
End Sub

① 累計数をTLという変数にしている
② その日の入場者数をSSという変数にしている
③ 繰り返しの回数を I という変数にしている
④ 累計数を 0 にリセット
⑤ 1日から25日までの25回の繰り返し
⑥ その日の入場者数を SS に代入
⑦ 入場者数が累計される
⑧ 入場者数の累計が5千人を超えたとき、この For ~ Next から抜け出す
⑨ 抜け出した日の横に累計数を書き出す

④のリセットはこのプロシージャ1回だけ動かすのならTLは最初 0 なので記載しなくても問題ありませんが、実際にプログラムを構築していきますと、前回処理したTLがリセットされることなくある数が代入されたままということはよくあります。
こういう変数は「必ず最初にリセットする構文を書く」ということをおすすめします。

⑦の累計ですが、1日目に初めてここを通過するときは右辺が「0 + 325」なので、左辺に325が代入されます。

翌日は右辺が「325+238」となるので、左辺が563に変わります。
こうして順次累計計算がおこなわれます。

⑧は TL>5000 すなわち累計入場者数が5000人を超えたらこの For ~ Next を抜けなさいという命令文です。

この時 I の値は、抜け出した時の I すなわち 16 です。
この文は

If TL>5000 Then
 Exit for
End If

と書いてもOKです。
ちなみに「Exit」とは「出口」という意味です。