【Excel】【VBA】for文を簡単解説

IT

ExcelでのVBAマクロを使えるようになると、人の手要らずでの計算やファイル作成が可能になります。

この記事では、VBAマクロでのfor文を紹介します。

for文とは

一定回数分繰り返し処理をさせることができるのが、for文です。

構文は下記のようになっています。

For 変数 = 初期値 To 終了値
    処理
Next 変数

例として、以下のようなプログラムを実行してみましょう。

Dim i As Integer
For i = 1 To 10
    Cells(i, 1) = 100
Next i

以下のような結果になりました。

セルのA1からA10までに100という数値が入力されています。

それでは、構文の意味をひとつずつ解説していきます。

まずは、最初の行です。

変数iを整数として定義しています。

Dim i As Integer

次のカタマリです。

変数iを1から10に変化させていきながら、中のセル入力処理を実行していることを意味しています。

For i = 1 To 10
    Cells(i, 1) = 100
Next i

※繰り返し処理の流れを記載していきます。

変数iの最初の値は1。Cells(1,1)=100となり、A1のセルに100を入力。

変数iの次の値は2。Cells(2,1)=100となり、A2のセルに100を入力。

変数iの次の値は3。Cells(3,1)=100となり、A3のセルに100を入力。

変数iの次の値は4。Cells(4,1)=100となり、A4のセルに100を入力。

変数iの次の値は5。Cells(5,1)=100となり、A5のセルに100を入力。

変数iの次の値は6。Cells(6,1)=100となり、A6のセルに100を入力。

変数iの次の値は7。Cells(7,1)=100となり、A7のセルに100を入力。

変数iの次の値は8。Cells(8,1)=100となり、A8のセルに100を入力。

変数iの次の値は9。Cells(9,1)=100となり、A9のセルに100を入力。

変数iの最後の値は10。Cells(10,1)=100となり、A10のセルに100を入力。

ワンランクアップ情報

変数iの値は、1の次は2、2の次は3と変化していきます。特に何か指定がなければ、+1して変数が変化していきます。

for文で何個飛ばしして処理する方法

次にfor文で何個飛ばしで処理をさせる方法を紹介します。

先ほどは、+1で変数が増えていきましたが、2個飛ばし(+2)で変数を変えていきたい場合は、「Step 数値」を追加で指定してあげる必要があります。

構文は下記のようになります。

For 変数 = 初期値 To 終了値 Step 数値
    処理
Next 変数

+2で変化させていく場合は「Step 2」と記載します。

-2で変化させていく場合は「Step -2」と記載します。

注意点

降順で変化させたい場合、「初期値 > 終了値」の関係になるようにしましょう。

For 変数 = 初期値 To 終了値 Step 数値
    処理
Next 変数

例として、以下のようなプログラムを実行してみましょう。

Dim i As Integer
For i = 1 To 10 Step 2
    Cells(i, 1) = 100
Next i

以下のような結果になりました。

セルのA1、A3、A5、A7、A9に100という数値が入力されています。

※繰り返し処理の流れを記載していきます。

変数iの最初の値は1。Cells(1,1)=100となり、A1のセルに100を入力。

Step 2なので変数iの次の値は3。Cells(3,1)=100となり、A3のセルに100を入力。

Step 2なので変数iの次の値は5。Cells(5,1)=100となり、A5のセルに100を入力。

Step 2なので変数iの次の値は7。Cells(7,1)=100となり、A7のセルに100を入力。

Step 2なので変数iの次の値は9。Cells(9,1)=100となり、A9のセルに100を入力。

Step 2なので変数iの次の値は11。と言いたいところですが、変数は1から10の間の値をとるので、変数iが9の時点までの処理が実行されます。

for文の繰り返し処理を途中で抜ける

for文の繰り返し処理は、基本的に初期値から終了値まで行われます。

ただ、この処理をIf文を使って途中で抜けることができます。

構文例としては下記のようになります。

For 変数 = 初期値 To 終了値
    処理
        if 変数 = 数値 then
            Exit For
        End If
Next 変数

例として、以下のようなプログラムを実行してみましょう。

Dim i As Integer
For i = 1 To 10
    Cells(i, 1) = 100
        If i = 6 Then
            Exit For
        End If
Next i

以下のような結果になりました。

セルのA1からA6に100という数値が入力されています。

※繰り返し処理の流れを記載していきます。

変数iの最初の値は1。Cells(1,1)=100となり、A1のセルに100を入力。変数iは6でないので、If文の処理は実行されない。

変数iの次の値は2。Cells(2,1)=100となり、A2のセルに100を入力。変数iは6でないので、If文の処理は実行されない。

変数iの次の値は3。Cells(3,1)=100となり、A3のセルに100を入力。変数iは6でないので、If文の処理は実行されない。

変数iの次の値は4。Cells(4,1)=100となり、A4のセルに100を入力。変数iは6でないので、If文の処理は実行されない。

変数iの次の値は5。Cells(5,1)=100となり、A5のセルに100を入力。変数iは6でないので、If文の処理は実行されない。

変数iの次の値は6。Cells(6,1)=100となり、A6のセルに100を入力。変数iは6なので、If文の処理は実行され、Exit Forつまりfor文を抜けて全体の処理終了。

繰り返し処理の流れで、くどいようですがIfの確認を都度しているということです。

ワンラックアップ情報

プログラミングは上から書いてある順に実行されます。

仮にセル入力の処理とIf文の順序が逆になった場合(下記)は、セルA5までの入力処理になります。If判定がセル入力処理よりも前にあるためです。

Dim i As Integer
For i = 1 To 10
    If i = 6 Then
        Exit For
    End If
    Cells(i, 1) = 100
Next i

プログラミングでとても重要な考え方ですので、しっかり理解しておきましょう。

for文の実用例

for文はどのようなときに利用するかを紹介します。

ある企業の購入マスタから、購入金額の合計金額を求めたい場合を考えてみます。

例として、下記のようなマスタがあったとします。

購入額の合計を求めるプログラミングは下記の通りです。

※あくまでも一例です。

Dim i As Integer
Dim sum As Integer
sum = 0
For i = 2 To 100
    If Cells(i, 1) = "" Then
        Exit For
    End If
    sum = sum + Cells(i, 4)
Next i
MsgBox ("合計金額は" & sum & "円です")

2行目からカウントしていくので、for文の初期値2とします。

If文で1列目の日付が空欄になったらfor文を抜ける処理を入れています。

合計値として変数sumを用意して4列目にある購入額を足していきます。

以下のような結果になりました。

※念のため、手計算しても同じ結果となりました。

でも、for文での終了値を100としているから、データが100個以上あったらどうするの?for文内で計算できないのでは?

ご指摘の通り。終了値を100としているので、それを超えるデータには対応できないコードとなっています。ただ、この問題を解消できる方法はもちろんあるので、別途紹介します。
とりあえず今回は、こんな処理が可能だということが伝わっていれば良いです。

まとめ

VBAマクロでのfor文について、紹介しました。

for構文

For 変数 = 初期値 To 終了値
    処理
Next 変数

Stepオプション

「Step 数値」で何個飛ばしでの処理を指定できます。

指定しない場合は、「+1」で変数が変化していきます。

for文を途中で抜ける

If文でExit Forで繰り返し処理を抜けることができます。

コメント

タイトルとURLをコピーしました