ExcelVBA(マクロ)で指定した回数同じ処理を繰り返す方法/For next文の使い方

connect IT

フォーマットとして「分割された住所をひとつにまとめる」場合で考えます。実務上VBAでは同じ処理を何度も繰り返す必要性がよく出てくるので、繰り返し処理は必ず覚えておく必要があります。
繰り返し処理では、他にDo Loopステートメントというものもあります。

Advertisements

例題

add1
実務上の理由により、住所が分割された状態で入力されたデータがあるものとします。
今回は、その分割されたデータをひとつのセルにまとめる処理をしたいと思います。
セルの値の取得、代入
対象.value
add10
まず一行だけやってみます。式としては単純で、Valueプロパティを連打し、Range(“D1”).Value = Range(“A1”).Value & Range(“B1”).Value & Range(“C1”).Valueのように記述します。
add11
マクロを実行すると、D1のValueにA1~C1のValueが結合され、結果値として貼り付けされました。
add12
あとは数字を1ずつ増やしていけば一応実装できます……が、実際は行が何百行もあったりするので、ちょっと現実的ではありません。

繰り返し処理

指定した数値分同じ処理を繰り返す
For 変数 = 初期値 to 最終値
(繰り返す処理)
next
add13
なので、For next文を使って繰り返し処理を行います。
For i = 1 to 3と書いた場合、変数iにまず数字1を入れ、その下の処理を行います。
処理が終わるとiの数字が1増えて2になり、同じ処理をもう一度行います。
この処理も終わるとiの数字が1増えて3になります。
to 3というのは「3まで」という意味なので、これ以上変数iの数は増えず、繰り返しが終わります。
結果3回同じ処理を行います。
add14
iには数字が代入されるので、Range(“A” & i)と書いた場合、一周目はA1、二周目はA2という意味になります。つまり繰り返すたびに行をひとつずつ下っていく処理が行えます。A,B,C,Dそれぞれに対し、& iをくっつけます。iを””の中に入れると文字列扱いされるので、外に出しておきます。
add15
nextを付けたところまでがFor next文で、ここまでくるとForに戻り、変数を1増やします。

Option Explicitを付けている場合は、Dimで変数を宣言する必要があります。

add16
マクロを実行すると、値が結合されて表示できました。これで何百行住所があっても、For nextの数字だけいじればマクロ一発で変換可能です。

番号を飛ばして繰り返し処理

' vba
For i = 1 To 5
Cells(i, 1).Interior.ColorIndex = 5
Next
たとえば左のようなコードを実行したとしましょう。
Interior.ColorIndexは背景の色を変更する命令で、これをCellsで1~5行目の一番左の列、つまりA1~A5に適用します。
step1
実行するとこうなります。iが1、2、3、4、5と増えて処理が終了します。
step2
このカウンタ変数の後ろに、Step 2と付けることで、ひとつ飛ばし(2ずつ数字が増える)形での繰り返し処理を行うことが可能です。
step3
実行結果です。数字が1、3、5と増えて処理が終わるため、間のセルは何も処理が実行されません。

ひとつ飛ばしのFor nextを使うと、たとえばセルをストライプ状に塗るような処理も比較的楽に実装できます。

ExcelVBA(マクロ)で一行おきに色を付ける方法/Color、For Next文、If文の組み合わせ方
テーブルなどでおなじみの縞々を、マクロで作ってみようという企画です。For next、Ifを使うので、工夫しだいで色んな処理に流用できます。

For Nextについては以上です。
他にFor each in nextという書き方もありますので、よろしければ併せてご参照ください。

やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント