こんにちは!Lenocoです。本日も見てくださりありがとうございます。
今回はFor Nextの入れ子について学びましょう!
For Nextの入れ子を学ぶ
前回は、For Nextの基礎を学びましたが、今回はFor Nextの中にFor Nextを入れる、入れ子について学びましょう。
下のような九九の表を埋めていくマクロを、For Nextを2つ使って作ってみます!
コード
Sub Main()
Dim i As Long, j As Long
Dim lastRow As Long, lastCol As Long
lastRow = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row
lastCol = ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column
For i = 3 To lastRow
For j = 3 To lastCol
ActiveSheet.Cells(i, j) = ActiveSheet.Cells(i, "B") * ActiveSheet.Cells(2, j)
Next j
Next i
End Sub
コードの説明
変数を宣言します。
最終行、最終列を可変にするため、格納する変数を用意しています。
また、For Nextで必須のカウンタ変数を2つ宣言しています。
最終行は、xlUpを使用し、Excelの最大行から上へ向かって最終行を取得しています。
最終列は、xlToLeftを使用し、Excelの最大列から左へ向かって最終列を取得しています。
続いてループの処理に入ります。
For Nextを入れ子で2つ作ります。
C3セルが表のスタートになるので、行、列のループの初期値はどちらも3となります。
内側のループの中で、掛け算の処理をいれます。
i行目のB列と2行目のj列を掛けた結果をi行目のj列番目に入れています。
3行目のC列(3列目)~K列目(11列目)まで行なったら、4行目のC~K列、5行目のC~K列…と最後の11行目まで行なっていきます。
ここは少しややこしいので、今何行目を見ているかな、何列目をみているかな、というのをイメージしながら進めていくとよいです。
また、わたしは外側を行、内側を列としましたが、逆でも構いません。その場合はiとjも入れ替えて作成してくださいね!
さいごに
うまく動けば以下の結果になるはずです。
For Nextの入れ子ができるようになると、ぐっと作業の幅が広がります!
ぜひマスターして業務に生かしてみてください。
Lenoco