Excelで作業する際、簡単な作業を繰り返す場面があります。その場合、「Excel VBA」のfor文を用いることで作業時間の短縮が可能です。
本記事では、「Excel VBA」でFor文をループ処理するための使い方を解説します。Do Loop文との違いも紹介するため、繰り返し処理する際の参考にしてください。
目次
ここでは、「Excel VBA」でのFor文の使い方を詳しく解説します。For文の構成要素は、カウンタ変数・初期値・終了値です。処理が始まると初期値に1ずつ加算され、設定値した終了値を超えるまで処理の繰り返しが可能です。
カウンタ変数は、繰り返し処理の回数をカウントする役割があります。カウンタ変数には処理が終わると初期値に1を加算した値が入り、終了値を数えるまでカウンタ変数は増え続けます。
Dim i As Integer For i = 1 To 10 Debug.Print(i) Next
上記コードの場合、「i」がカウンタ変数、「1」が初期値、「10」が終了値です。For文の主な使い方は以下の通りです。
それぞれ詳しく解説します。
For文の処理中に、別のFor文の処理を書くことを入れ子といいます。For文を入れ子にすることで、外側のFor文が繰り返されるたびに、内側に記述したFor文の繰り返し処理を全て実行するような処理が可能です。セルを扱う際には、For文を入れ子にする場面が多くなります。
実際のコードは以下の通りです。
Dim x As Integer, y As Integer For x = 1 To 5 For y = 1 To 5 Cells(x, y) = x + y Next Next
このコードを実行すると、5行×5列で25個のセルに行と列を足した数字が入ります。たとえば、C列の1行目なら3列目+1行目で4、A列の5行目なら1列目+5行目で6です。
For文を使う際、ある条件を満たしたら途中でループを抜け、処理を実行させないようにしたい場面があります。このようなときにループを飛ばしたり途中で抜けたりするには、if文を使う方法とExit Forを使う方法があります。
If文を使ったコードは、以下の通りです。
Dim i As Integer For i = 1 To 10 If Not i = 5 Then Debug.Print(i) End If Next
上記コードの場合は1〜10まで表示する処理ですが、if文の内容から5回目の処理は飛ばされます。そのため、実行結果に5は表示されません。
Exit forを使ったコードは以下の通りです。
Dim i As Integer For i = 1 To 10 Debug.Print(i) If i = 5 Then Exit For End If Next
Exit forを使うと完全にループから抜け出します。そのため上記のコードの場合、繰り返し処理は5回目で終了し1〜5まで出力されます。
Excelの表は、数千行のデータが格納されている場合があります。多量のデータがある場合、固定の回数をFor文で指定するのではなく最終行を指定すると便利です。
表の最終行は「Cells(Rows.Count, 1).End(xlUp).Row」で取得でき、最終行までループ処理が実行されます。
最終行までループさせるコードは以下の通りです。
Dim i As Integer For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Cells(i, 2) = i Next
「Excel VBA」でのFor Next文は、カウンタに所定の回数を設定し、その指定回数に達するまで繰り返し処理を実行する場合に使います。For文の基本といえる処理であり、stepやGoToを併用することでさらに複雑な処理ができます。
実際のコードは下記の通りです。
Dim i As Integer For i = 1 To 10 Debug.Print(i) Next i
上記コードの場合iが指定したカウンタとなり、所定の回数は10のため、iが1~10まで10回ループします。
For Next文で繰り返し回数を指定する場合は、初期値と到達値を設定します。たとえば初期値に1、到達値に5を入れた場合、1~5まで繰り返し処理が実行されます。
「For インデックス = 初期値 To 最終値 Step 加算値」のようにStepを入力して、インデックスの加算値もしくは減算値を指定できます。
条件を満たすまでループさせたい場合は、「Do While」や「Do Loop」を使うとよいでしょう。
For Next文は主に以下のような使い方があります。
通常、For Nextのカウンタは1ずつ増加しますが、Stepを使うことでループ1回ごとの増減値を変更できます。実際のコードは以下の通りです。
Dim i As Integer For i = 1 To 9 Step 2 Debug.Print(i) Next i
上記コードの場合、カウンタが2ずつ増加するため、実行結果は1,3,5,7,9となります。またStepで指定する値をマイナスにすることで、カウンタの減算もできます。
Dim i As Integer For i = 5 To 1 Step −1 Debug.Print(i) Next i
上記のコードの場合、カウントが5からスタートして1ずつ減少するため、実行結果は5,4,3,2,1です。
For Nextのループをスキップする場合、「VBA」以外のプログラミング言語では一般的にcontinueを使いますが、「VBA」ではGoToを使用します。
実際のコードは、下記の通りです。
Dim i As Integer For i = 1 To 10 If i = 5 Then GoTo Continue End If Debug.Print(i) Continue: Next i
上記コードの場合、iが5のときはGoTo ContinueによってContinue:まで処理が飛ばされます。その結果、Continue:より前にあるDebug.Print(i)の処理がおこなわれないため、実行結果に5は表示されません。
For Nextステートメントの中に、For Nextステートメントを記述することで、入れ子構造にできます。Excelでは、n行m列の数値やデータを扱うことが多く、For Nextを入れ子にすることで行と列を同時に処理します。
実際のコードは下記の通りです。
Dim x As Integer, y As Integer For x = 1 To 7 For y = 1 To 5 Cells(x, y).Value = 1 Next y Next x
上記コードの場合、xが行でyが列のため、E列の7行目まで1が入力されます。
For Each文は、グループ内の要素をループ処理します。要素の数だけ繰り返し処理をおこなうため、For文よりも便利です。
コードでは、For Each 要素 In グループのように入力します。グループに該当するものは配列やコレクションです。
なお、For Eachで使用できる要素の型はVariant型・オブジェクト型・コレクション型になります。
ここからは、For Each文の基本的な使い方を解説します。処理をおこなう要素が含まれているグループを指定し、要素用の変数を宣言することで、グループ内の要素が順番にその変数に設定され、最終的に全要素がループ処理されます。
実際のコードは以下の通りです。
Dim sample As Range For Each sample In Range("A1:A5") Debug.Print(sample.Address) Next
上記コードの場合、RangeグループにA1〜A5の要素を設定してsample変数に代入し繰り返し処理をおこないます。そのため、実行結果にはA1~A5のセルアドレスが表示されます。
配列の全要素を繰り返す場合のコードは、以下の通りです。
Dim fruits As Variant, item As Variant fruits = Array("apple", "grapes", "orange") For Each item In fruits Debug.Print(item) Next
上記コードの場合、配列fruitsに含まれている要素apple, grapes, orangeが実行結果に出力されます。
Do Until Loopを使用すると、指定した条件を満足するまで繰り返し処理をおこないます。記述方法はDo Until 条件と入力し、Do UntilとLoopの間に繰り返したい処理を指定します。
条件を満たすまで繰り返し処理を実行するため、始めから条件を満たしていた場合は一度も繰り返し処理が実行されません。
Do Until Loopは、条件を満たすまで繰り返し処理を実行したい場合に使用します。実際のコードは下記の通りです。
Dim As i Integer i = 1 Do Until i > 5 Debug.Print(i) i = i + 1 Loop
上記コードの場合、iが5より大きくなるまで処理が繰り返されるため、実行結果は1,2, 3, 4, 5となります。似ている記述方法には、以下のコードがあります。
Dim As i Integer i = 1 Do Debug.Print(i) i = i + 1 Loop Until i > 5
Do Until Loopとの違いは、処理条件の記述位置です。Doの直後に書いた場合は、開始時点で処理条件を満たさないとループ処理を実行しません。つまり、Do以降の処理が1度も実行されない場合があります。
一方でLoop直後に処理を書いた場合は、指定した条件を満たすまで処理を実行します。その判断はLoopの後におこなうため、Do以降の処理が必ず1度は実行されます。
For文もDo Loop文も繰り返し処理を実行するという点では同じです。しかし、For文は繰り返し処理の回数を設定しますが、Do Loop文は条件を満たすまで、あるいは条件を満たさなくなるまで処理を繰り返すという違いがあります。
Do LoopでもFor文の役割を果たすことはできますが、間違った条件を設定した場合に処理の無限ループに陥るリスクがあります。
そのため、繰り返し処理は基本的にFor文を使い、限定的な処理条件を設定する場合にDo Loop文を使うとよいでしょう。
本記事では、「Excel VBA」でのFor文でループ処理するための使い方とDo Loop文との違いを解説しました。
Excelの複数セルに記述されている大量の値も、For文の使い方を覚えてしまえば効率よく繰り返し処理がおこなえます。
For文よりもDo Loop文のほうが有効な場面もあるため、状況に応じて使い分けてみてください。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール