For nextの繰り返し処理で、配列の要素を繰り返し処理したいときがあります。
このときFor NextでLBoundとUBoundを使うことで、配列の各要素に対して処理を実行できます。
1 2 3 |
For i = LBound(myarray) To UBound(myarray) 処理 Next |
配列の最初の要素から最後の要素まで処理
以下で具体的な説明をしていきます。
目次
For Nextを配列の各要素を処理
ここでは配列「あいうえおかきくけこ」の各要素をエクセルに出力していきます。
まずは全体のプログラムを紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
'プログラム0|変数宣言の指定 Option Explicit 'プログラム1|プログラム開始 Sub Sample11() 'プログラム2|変数設定 Dim i As Long Dim myarray As Variant 'プログラム3|配列の設定 myarray = Array("あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ") 'プログラム4|配列の各要素を処理 For i = LBound(myarray) To UBound(myarray) 'プログラム5|A列に値を出力 Range("A" & i + 1).Value = myarray(i) Next 'プログラム6|プログラム終了 End Sub |
以下で詳しく説明します。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
プログラム1|プログラム開始
1 |
Sub Sample11() |
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラム2|変数設定
1 2 |
Dim i As Long Dim myarray As Variant |
本プログラムで使用する変数を設定します。
iはFornextの数値カウンターとして使用します。
myarrayはプログラム3で設定する平仮名の配列として使用します。
変数については、以下のページで紹介しています。
プログラム3|配列の設定
1 |
myarray = Array("あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ") |
変数myarrayに「あいうえおかきくけこ」の要素を入れて設定します。
プログラム4|配列の各要素を処理
1 2 3 4 5 6 |
For i = LBound(myarray) To UBound(myarray) 'プログラム5|A列に値を出力 'Range("A" & i + 1).Value = myarray(i) Next |
上記のForとNextの間を、配列の各要素を一つずつ処理していきます。
LBoundとUBound
UBound(配列):配列のインデックスの最大値
LBoundとUBoundを使うメリットは以下です。
「配列のサイズ(要素数)を意識しないでマクロを書けるので、メンテナンスが不要」になること。
というのも、配列のサイズ(要素数)を変更することになっても、配列のサイズが変更されると自動でLBoundとUBoundの値が変更されるからです。
よって配列でForNextを使うときは、LBoundとUBoundを使うと便利です。
Debug.PrintでLBoundとUBoundを検証
1 2 3 4 5 |
Debug.Print "LBound(myarray):" & LBound(myarray) Debug.Print "UBound(myarray):" & UBound(myarray) >>>LBound(myarray):0 >>>UBound(myarray):9 |
この事例ではLBoundとUBoundを確認した結果、上記のように0と9が出力されます。
Debug.Printでmyarrayを検証
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Dim i As Long For i = LBound(myarray) To UBound(myarray) Debug.Print "i" & i, myarray(i) Next >>>i=0 あ >>>i=1 い >>>i=2 う >>>i=3 え >>>i=4 お >>>i=5 か >>>i=6 き >>>i=7 く >>>i=8 け >>>i=9 こ |
このように「myarray(i)」でiの数値に応じた配列の値を取得できます。
これをエクセルに出力していきます。
プログラム5|A列に値を出力
1 |
Range("A" & i + 1).Value = myarray(i) |
A列の(i+1)行目のセルに、myarray(i)の値を出力します。
左辺は「Range(“A” & i + 1).Value」で右辺は「myarray(i)」とします。
このとき、左辺をi+1としています。
やりがちなミス|配列の要素番号は0から開始
1 |
Range("A" & i).Value = myarray(i) |
やりがちな記述ミスとして、上記のプログラムがありますが、これはエラーが出ます。
その理由は配列の要素番号が0から開始するため、Range(“A” & i)がセルA0となるからです。
セルA0はエクセル上に存在しません。
よってエラーとなってしまいます。
プログラム6|プログラム終了
1 |
End Sub |
プログラム1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの解説はここまでです。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
少しずつレベルアップしながら、難しい内容に挑戦していくと効率的に学ぶことができます。
上記のリンクでは、VBA勉強に役立つ内容を紹介しています。
興味がある人はご覧ください。