拙著『いちばんやさしいExcel VBAの教本』は、持ち歩いていただくことも期待して、できるだけ薄くすることを考えました。
当初はなんとか250ページ程度にできないかと思っていたのですが、最終的に304ページとなりました。削除した内容も結構あります。
そのひとつが、ループの中にループを入れたマクロです。
2重ループ処理を行っているサンプルマクロ
実務で使えるExcelマクロでは、行方向のループ処理の中に、列方向のループの入った、2重でループ処理を必要するケースがあります。
そのようなループの中にループの入った2重ループの、簡単なサンプルをご紹介しておきます。
Dim r As Long
Dim c As Long For r = 1 To 5
For c = 1 To 2
Cells(r, c).Select
MsgBox r & "行目" & c & "列目"
Next c
Next r
End Sub
上記のSubプロシージャを実行すると、A1→B1→A2→B2→...→A5→B5の順に、セルが選択され「1行目1列目」といったメッセージボックスが表示されます。
変数を確認しつつステップ実行して理解しましょう
拙著ではじめてプログラミングを学習した方にとって、上述の2重ループはかなり難しく感じる可能性があります。
ローカルウィンドウで、変数r・cの中身を確認しながら、Cells(r, c)がどのセルを表すRangeオブジェクトを返すのかを意識しながら、じっくりとステップ実行しましょう。
なかなか理解できないようであれば、Cells(r, c)がどのセルを表すのかを、紙に手書きして考えるのも有効なはずです。
複合参照が難しいのと同じ
Excelで$マークが行または列のいずれか一方にだけつく複合参照を理解するのは、絶対参照を理解するよりも格段に難しかったはずです。
同様に1重のFor~Next文より2重のFor~Next文が格段に難しいのは、当然です。
あきらめずじっくり取り組みましょう。
変数名を変えるのも有効です
拙著のLesson 29「変数の基本を学習しましょう」でも触れているとおり、Row・Columnの頭文字から上述のSubプロシージャでは変数名を「r」と「c」にしています。
rとcでは、どちらの変数が何を表しているのかがどうもわからないと感じるのなら、変数名を変えるのも有効です。
例えばrを「行」、cを「列」という変数名にして以下のような形のほうが、わかりやすいと感じる方も少なくないでしょう。
Dim 行 As Long
Dim 列 As Long For 行 = 1 To 5
For 列 = 1 To 2
Cells(行, 列).Select
MsgBox 行 & "行目" & 列 & "列目"
Next 列
Next 行
End Sub
最終更新日時:2019-04-29 11:30
- Newer:VBAでスライドショーをアクティブに
- Older:プラスのみ合計する-SUMIF・SUMIFS
Home » いちばんやさしいExcel VBAの教本 » ループの中にループ