エクセルVBAで、For next文を2つ以上入れる場合について紹介します。
ここではForNextを2つ使った事例として、かけ算九九の表を作っていきます。
目次
For Next文の2つ以上(複数)の組み合わせ
セルA1からセルI9まで、9×9のセル領域にかけ算九九の結果を入力していきます。
まずは全体のプログラムを紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
'プログラム0|変数宣言の指定 Option Explicit 'プログラム1|プログラム開始 Sub Sample5() 'プログラム2|変数設定 Dim i As Long, k As Long 'プログラム3|1つ目のForNext For i = 1 To 9 'プログラム4|2つ目のForNext For k = 1 To 9 Cells(i, k).Value = i * k Next Next 'プログラム5|プログラム終了 End Sub |
以下で詳しく説明します。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
プログラム1|プログラム開始
1 |
Sub Sample5() |
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラム2|変数設定
1 |
Dim i As Long, k As Long |
本プログラムで使用する変数を設定します。
Long(整数)型の変数を2つを使います。
変数については、以下のページで紹介しています。
プログラム3|1つ目のForNext
1 2 3 4 5 6 7 8 9 |
For i = 1 To 9 'プログラム4|2つ目のForNext 'For k = 1 To 9 ' ' 'プログラム5|i×kのセルに出力 ' Cells(i, k).Value = i * k 'Next Next |
上記のFor(1行目)とNext(9行目)の間を、i=1,2,3,・・・,7,8,9と1つずつカウントアップしながら、繰り返し処理を行います。
プログラム4|2つ目のForNext
1 2 3 4 5 |
For k = 1 To 9 ' 'プログラム5|i×kのセルに出力 'Cells(i, k).Value = i * k Next |
上記のFor(1行目)とNext(5行目)の間を、k=1,2,3,・・・,7,8,9と1つずつカウントアップしながら、繰り返し処理を行います。
iとkがどのような動きをするかを以下で検証します。
Debug.Printでの検証結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Dim i As Long, k As Long For i = 1 To 9 For k = 1 To 9 Debug.Print "i:" & i, "k:" & k Next Next >>>i:1 k:1 >>>i:1 k:2 >>>i:1 k:3 >>>i:1 k:4 >>>i:1 k:5 >>>i:1 k:6 >>>i:1 k:7 >>>i:1 k:8 >>>i:1 k:9 >>>i:2 k:1 >>>(省略) >>>i:8 k:9 >>>i:9 k:1 >>>i:9 k:2 >>>i:9 k:3 >>>i:9 k:4 >>>i:9 k:5 >>>i:9 k:6 >>>i:9 k:7 >>>i:9 k:8 >>>i:9 k:9 |
上記のようにFor~Nextの間でiやkを1ずつ加算して、処理を行っていきます。
プログラム5|i×kのセルに出力
1 |
Cells(i, k).Value = i * k |
i行目、k列目に「i×k」の値を出力します。
プログラム3とプログラム4で、iとkをFornextで1ずつ加算しているため、かけ算九九の結果をエクセルに出力することが可能です。
RangeとOffsetでも記述可能
1 2 3 |
'以下の2つは同じ結果を出力可能 Cells(i, k).Value = i * k Range("A" & i).Offset(0, k - 1).Value = i * k |
上記の「Cells(i, k).Value = i * k」は、「Range(“A” & i).Offset(0, k – 1).Value = i * k」でも同じ結果となります。
Cellsのほうがすっきりしていますが、CellsとRangeの両方を覚える必要はありません。
個人的にはRangeとOffsetの使い方に慣れているので、Cellsはあまり使いません。
しかし、CellsでもRangeも記載しやすいほうを選択することで問題ありません。
プログラム6|プログラム終了
1 |
End Sub |
プログラム1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの解説はここまでです。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
少しずつレベルアップしながら、難しい内容に挑戦していくと効率的に学ぶことができます。
上記のリンクでは、VBA勉強に役立つ内容を紹介しています。
興味がある人はご覧ください。