Home » いちばんやさしいExcel VBAの教本 » ループの中にループ

対象:Excel 2010, Excel 2013, Windows版Excel 2016

ループの中にループ

拙著『いちばんやさしいExcel VBAの教本』は、持ち歩いていただくことも期待して、できるだけ薄くすることを考えました。

当初はなんとか250ページ程度にできないかと思っていたのですが、最終的に304ページとなりました。削除した内容も結構あります。

そのひとつが、ループの中にループを入れたマクロです。

2重ループ処理を行っているサンプルマクロ

実務で使えるExcelマクロでは、行方向のループ処理の中に、列方向のループの入った、2重でループ処理を必要するケースがあります。

そのようなループの中にループの入った2重ループの、簡単なサンプルをご紹介しておきます。

Sub ループの中にループ()
 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を「列」という変数名にして以下のような形のほうが、わかりやすいと感じる方も少なくないでしょう。

Sub ループの中にループ_変数名変更後()
 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

[スポンサードリンク]

Home » いちばんやさしいExcel VBAの教本 » ループの中にループ

「いちばんやさしいExcel VBAの教本」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.