エクセルVBAで最も多く使われる繰り返し処理はなんと言ってもこの For~Next だと思います。これなくしてマクロは成り立たない(大げさ)といっても過言ではありません。
繰り返し処理は様々な場面で利用されます。エクセルのワークシートから順番にデーターを読み込んで変数に格納するとき、エクセルのシートに該当するデータがあるかどうかを調べるとき、そしてシートのデーターを順番に印刷するときなどにも使います。
さて実際の書き方は
For i = 数字 To 違う数字(もしくは同じでも可)
(処理したい内容)
Next
です。 i は変数ですので好きなものを自分でつけることができます。(半角の場合で255文字以内、漢字やひらがなも使えます)
Forの場合は1回転(ForからNextまでを1回転)するごとに特に記載がなければ数字は1ずつ増えていきます。もしも増やす数字を変えたければStepを使います。そのときの書き方は
For i = 1 To 100 Step 2
のようになります。この場合は2ずつ増えていくことになります。
前回ご紹介させていただきましたDo ~ Loopの場合はちゃんと数字を増やす式を別に書かなければなりませんでしたからその点For~Nextのほうが手間が省けます。
Do~LoopでもそうですがFor~Nextも入れ子状態にすることができます。入れ子状態とはループ(繰り返し処理)の中にまた新たな繰り返し処理を入れることです。下記例は入れ子のマクロです。For~NextとDo~Loopが入れ子になっております。
--------------------------------------------------
For i = 3 To MaxRows
ListNamae = Touseki.Cells(i, 3)
KBanme = 0
LBanme = 0
Do ←For の中の入れ子になっています
Do While Nagasa >= KBanme ←For と Doの中の入れ子になっています
KBanme = KBanme + 1
KensakuChar = Mid(Namae, KBanme, 1)
If KensakuChar <> " " Then
Exit Do
End If
Loop
Do While Nagasa >= LBanme ←For と Doの中の入れ子になっています
LBanme = LBanme + 1
ListChar = Mid(ListNamae, LBanme, 1)
If ListChar <> " " Then
Exit Do
End If
Loop
If KensakuChar = ListChar Then ←For と Doの中の入れ子になっています
If Nagasa = KBanme Then
With MeNamae
.ListBox1.AddItem (ListNamae)
End With
End If
Else
Exit Do
End If
Loop Until Nagasa <= KBanme
Next
--------------------------------------------------
For i = 1 To 10 の i は変数ですので宣言(変数の型を決める)をします。エクセルVBAでは宣言をしなくても変数を使うことはできます。その場合は Variant型 という型になります。Variant型は容量が大きい(16バイト)ので膨大な繰り返し処理をするときには Integer(2バイト)やLong(4バイト)型に比べて時間がかかってしまうという欠点もあります。
しかし必ずしもバイト数が少なければよいというわけではなく、少ない分入れられる数字には制限があります。Integer型には、-32,768 ~ 32,767 の範囲の数字しか入れることができません。こ
れを超えるとエラーになります。
わき道にそれてしまいました。実は私は For~Next のときの変数の宣言はしていませんでした。テキストにも宣言されていなかったからです
しかし、この記事を書いていて「そうなんだ・・・」と思った次第でした。(すみません)
コメント