この記事では、VBAの二重ループを使って、東京観光が味わえる様なコードを掲載しております。
ちょっと、ループが心配だという方は先に
05 はじめてのFor Nextループ(ループは1つのみ)
06 二重ループでソーシャルディスタンス(二重ループがはじめての方向け)
をご覧頂けますと幸いでございます。
では早速、二重ループを使って、「スカイツリー ・ お台場 ・ 新宿都庁 ・ 水元公園」の観光をご案内致します!!
この上記の4箇所の「観光地」が、「外側のループ」で変数iを使います。
内側のループでは、「写真を撮る・帰宅する・SNSにアップする」と、「やること」を変数jで使います。
つまり、
観光地を外側のループで「スカイツリー」で固定して、内側のループで「写真を撮る」・「帰宅する」・「SNSにアップする」の3つ「やること」を行って、内側のループを抜けます。
次に、外側のループで観光地を「お台場」に固定して、「写真を撮る」・「帰宅する」・「SNSにアップする」の、3つ「やること」を行って、内側のループを抜けて、次の場所の「新宿都庁」に移動して、最後に「水元公園」まで繰り返します。
以上で、4×3で12の観光旅行の工程を楽しみます!!
「観光地」を外側ループのカウンタ変数 i、 「やること」を内側ループのカウンタ変数 jにして、ループをぐるぐる回して東京観光を楽しむイメージです。
この東京観光の二重ループのイメージを表にすると、
この様な表にまとまりました。
この表は、シート「東京観光」に作成しました。
では下記のコードで、同じシート「東京観光」の表の右1つ開けて、セルD1に出力します。
※ 先にシート「東京観光」を作成してから実行して下さい。
セルの値を利用するので、観光地のiは1から12まで3つ飛ばしで増やし、やることのjは1から3の1つずつ増やします。
(「やること」の、「写真を撮る」・「帰宅する」・「SNSにアップする」は、内容が同じなので、最初の「スカイツリー」の右の値である2行目、3行目、4行目を使います。)
まず、観光地「スカイツリー」はセルA2です。
Cellsで表わすと、セルA2はCells(2,1)になります。
Cellsは(行 , 列)と表記するので、(タテ , ヨコ)です。
外側の変数は「i」なので、i=1の時、Cells(i+1,1)になります。
内側の最初のやることは、「写真を撮る」で、 これはセルB2です。
このセルB2はCells(2,2)なので、j=1の時はCells(j+1,2)でCells(2,2)になります。
「観光地」と「やること」を「&」で結合しています。
それでは、内側をjを1~3まで回わすので、次はj=2です。
「帰宅する」はセルB3なのでCellsでは(3,2)です。
j=2で、Cells(j+1,2)は、Cell(3,2)になります。
その次はj=3で、「SNSにアップする」はセルB4なのでCellsでは(4,2)です。
Cells(j+1,2)は Cells(4,2)になります。
内側ループの最後は「SNSにアップした」なので、jが3まで行ったら内側のループを抜けて、外側の場所を「お台場」に移動します。
二重ループとはこの様に、内側を速く回して、外側をゆっくり固定しながら回す、
というイメージでグルグル回していきます。
このプログラムを動かして出力する側の最初のセルD1は、黄色い所です。
これを1つずつ下に下げていきます。ActiveCell.Offset(1,0).Selectで、
Offsetを使って、相対的に移動します。
場所が「スカイツリー」から「お台場」に移動する時、1つ行を空けます。
その部分はIF文を使っていますね。
これは外側の変数が最後の「スカイツリー」〜「都庁」の時だけ、下に1行空けるように移動するといった、調整しています。
スカイツリーの時のiの値は1、お台場では4、都庁では7、水元公園では10になります。
最後の観光地の水元公園の時にi=10になるので、「それ以外の時には」次の場所に移る前に空白行を空けたいので、1行下に移動します。
これは、言葉で伝えるとややこしいので、コメントアウトしてみたり、実際にコーディングして、 感覚的にあ~、なるほどって感じで感覚を掴んで行きます。
VBAのコードはこちらです。
Sub 二重ループで東京観光()
'ループのカウンタ変数iとjを宣言
Dim i As Integer, j As Integer
'シート「東京観光」をアクティブにする
Worksheets("東京観光").Activate
'表の右1つ開けてセルD1をアクティブにする
Range("D1").Activate
'外側のループのカウンタ変数iで「観光地」を表す
For i = 1 To 10 Step 3
'内側のループのカウンタ変数jで「やること」を表す
For j = 1 To 3
'アクティブセルに「観光地」と「やること」を出力する
ActiveCell.Value = Cells(i + 1, 1).Value & Cells(j + 1, 2).Value
'セルを1つ下に移動する
ActiveCell.Offset(1, 0).Select
'内側ループを進める
Next j
'内側ループを抜けて外側ループに入る
'もしもi<10場合は、次の観光地に移る前に1行空ける
If i < 10 Then
ActiveCell.Offset(1, 0).Select
End If
'外側ループを進める
Next i
End Sub
実行結果です。
このように、次の場所に移る際に1行空けていますね。
これは先ほどのIF文の所をコメントアウトすると、
このように、ちょっと見辛い出力結果になってしまいました。
プログラミング学習で、「これはどういう処理なんだろう・・・?」と疑問に思ったことは、コメントアウトしてみて出力結果から思考すると、プログラミング学習が一層楽しめると思います。
このコードとは話が逸れますが、プログラミング学習よりも大事なことをお伝えします!!
SNSに写真をアップするのは、「帰宅後・事後報告」でお願いします。
外出中にアップすると、「あの家、留守だ!!」と思われて、「特定屋」といった人達に特定されて、ご自宅が危険になってしまう恐れもあります。
そのため、このプログラムの内ループでも、「 写真を撮る → 帰宅する → SNSにアップする」という流れに致しました。
皆さまが(私も)安心安全にプログラミング学習を進められることを願っております。
皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・
このプログラムに登場した観光地です。
● スカイツリー(2022年11月、浅草から撮影したスカイツリーのライトアップは「粋」です。)
● お台場(2022年12月、お台場海浜公園から冬のレインボー花火大会を撮影しました。)
●新宿都庁(2019年4月、世界自閉症デーのライトアップ)
● 水元公園(2018年GWに新緑のグリーンエクササイズを楽しみました。)
仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!
こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。
※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪
最後までご精読、誠にありがとうございました!!
自己紹介
VBA自作サンプルプログラム集へ戻る
取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ
MOSなどの資格試験対策