駆け出しエンジニアの日記。

Fランの情報系大学卒業。 GS店員→監視オペ→自動車開発設計補助→DB構築プロジェクト参画→C言語を使うプロジェクト。クラッシャー上司のいびりに耐えきれず適応障害で休職中。

VBA(For~Nextの二重ループについて)

お疲れ様です。こんにちはトモです。

本日はVBAの二重ループについて

勉強しました。

 

全然コードが書けなくて、自社のサポートセンターに問い合わせたところこのような回答が。

 

【考え方】
 
for i = 2 to 11
   for j = 2 to 11
      Cells(i,j)=Cells(i,1) * Cells(1,j)
   next
next
 
まず、for~nextの2重ループに関しては、i=2、j=2で開始。
内側のfor~nextのj変数が2~11までインクリメントした後、
外側のfor~nextのi変数が2→3とインクリメントされ、
再度、内側のfor~nextのj変数が2~11までインクリメントした後、

外側の for~nextのi変数が3→4・・・といった処理になります。

 
【解説】
最初にi=2、j=2が代入され、
i=2、j= 2 Cells(2,2)=Cells(2,1)*Cells(1,2)=5*8=40
excel表の2列2行目であるB列2行目に40が入ります。
 
次にjループのnextが実行され、iループは2のまま、jが2→3に変更、
i=2、j= 3 Cells(2,3)=Cells(2,1)*Cells(1,3)=5*3=15
と2列3行目であるB列3行目に15が入ります。
またjループのnextが実行され、jが3→4に変更し・・・
といった具合にjループがj=11まで計算される事で
i=2、j= 4 Cells(2,4)=Cells(2,1)*Cells(1,4)=5*4=20 B列4行目
i=2、j= 5 Cells(2,5)=Cells(2,1)*Cells(1,5)=5*5=25 B列5行目
i=2、j= 6 Cells(2,6)=Cells(2,1)*Cells(1,6)=5*9=45 B列6行目
        ・
        ・
        ・
i=2、j=11 Cells(2,11)=Cells(2,1)*Cells(1,11)=5*7=35 B列11行目
と、excel表のB列が11行目まで計算され指定のセルに入力されます。
 
j=11まで動いた後のjループのnextでjは11から2に戻ります。
そしてiループのnextが実行され、iループが2→3に変更されます。
またjループに移り、jが2から11まで計算され・・・といった具合に
今度はexcel表のC列が2行目から11行目まで入力されていきます。
 
i固定⇒数値の計算
その後jに移行
 
そのため
Cells(i,j) =Cells(i,1) * Cells(1,j)という感じになるのかと
ちょっと腑に落ちて楽になりました。もう一度期間空けてコード組みなおします☺
 
あ、そういえば7/28~7/31でヴィパッサナー瞑想に行ったのでまたそれもまた時間がある時に更新していきます☺
 
閲覧ありがとうございました。