【広告】

しのちーチャンネル

For i = 3 To MaxRows ~ Next エクセルVBAの繰り返し処理

エクセル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 のときの変数の宣言はしていませんでした。テキストにも宣言されていなかったからです
しかし、この記事を書いていて「そうなんだ・・・」と思った次第でした。(すみません)

コメント

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