こんな方に書いた記事です。
- プログラミングを勉強するのはマクロ(エクセルVBA)が初めて
- 初級本を読んで途中からわからなくなった
- まずはルーティン業務の時短が主な目的である(本格プログラミングというよりは、ざっくりと理解しすぐ使いたい)
「プログラミング初心者が練習しながら理解するエクセルマクロ」を初めて読まれる方はこちら
プログラミング初心者に立ちはだかる壁「 i=i+1 」
プログラミング初級本も中盤に差し掛かったあたりに出てくる「繰り返し処理」。
最初に言っておきますと、これの使い方が分かるとプログラミングが楽しくなってきます。人力でやっていた同じ処理があっという間に自動化でいきます。
その時に、前回やった変数の「 i 」がでてきます。
もちろん、変数は自分で命名できるので 「 i 」 じゃなくてもよいです。
これ、理解するまでのハードルはちょっと高いです。まず、 「 i=i+1 」 って、今まで数学で習った等式の常識を外れませんか。(ちなみに私は文系です。)結構混乱すると思われます。
学校で習ったことの中で近いのは・・・
「数学的帰納法」って覚えていますか?私はあれに近いと考えています。
※数学が嫌いだった人は、読み飛ばしてください。
1+2+3+…+n-1+n=½ n(n+1) を証明せよ。
1から順に足していくと、その最後の数とその次の数を足して2で割ったものと等しくなることを証明します。
まず、n=1を代入したときに成り立つことを確認し、
次にn=kで成り立つと仮定すると、n=k+1でも成り立つことを証明する。
i=i+1ってどう見てもイコールにならない気がします・・・
ですよね。。。
プログラミングでは「=」は「等しい」という意味でない場合もあります。マクロでは、主に右辺を左辺に代入するという意味になります。
i = i+1 は、「左辺のi」に、「右辺の i+1 」を代入するということです。
ますます混乱してきました?下の練習問題に進みましょう。慣れるが勝ちです。
i=i+1 を練習しながら理解しよう
Cells(a,b) a:行 b:列
例えばcells(2,3)なら、2行目のC列です。
どっちが行でどっちが列か、覚えるまで間違えやすいです。
あと列はExcelだとアルファベットなので、何列目かいちいち数えるのが面倒なので、対応表をつくると良いでしょう。
練習① まず、復習も兼ねて変数の置き方から。下記のコードについて、1を変数「 i 」に書き換え、変数を宣言してください。
Dim sht_1 As Worksheet
Set sht_1=Thisworkbook.sheets(1)
sht_1 .Cells(1,5)=”E1″
sht_1 .Cells(1,2)=”B1″
sht_1 .Cells(1,8)=”H1″
まずは変数「i」に見慣れてもらうための問題でした。次は 実際に代入してみます。
練習② 今度は逆に、下記のような変数iが含まれるコードをア~オに従い実際の数に置き換え(代入し)てください。
※分かりやすくするために、変数の宣言その他は省略してあります。
ア、i=1
イ、i=2
ウ、i=3
エ、i=4
オ、 i=5
それぞれを代入したとき、どうなりますか。
練習③ 下記のコードについて、⓶のi*2はどう変化していきますか?ア~ウから選択してください。
こんな感じのエクセルシートをイメージしてください。数字が入っている5行目までB列に計算結果を書いていきたいとします。
i=1 からスタートして、⓵⓶③⓸の順に代入していき、⓸までいったら⓵に戻って繰り返します。 ※こちらも変数の宣言等は省略。
i = 1
ア、2,4,6,8
イ、2,4,6,8,10
ウ、2,4,6,8,10,11
練習③の長い長い解説はこちら。
LOOP 1週目 i=1 のとき
⓵””は空欄という意味です。「Cells(i,1)が空欄になるまで」この処理を繰り返すということになります。
i=1なので、Cells(1,1)つまりA1セルを見ます。1という数字が入っているため空欄ではありませんので、②に行きます。
⓶i=1を代入すると、
sht_1 .Cells(1,2)=2 となります。
つまりA1に2という数字が書き込まれます。
③n=n+1 まず、n=1は右辺(n+1)だけに代入してください。
すると、n+1は2になり n=2 となります。
つまり、次の数になる、このエクセルでは、次の行に行くということを表します。(ここでは i は行なので)
⓸までいったので⓵に戻ります。
LOOP 2週目 i=2 のとき
⓵i=2なので、Cells(2,1)つまりA2セルを見ます。2という数字が入っているため空欄ではありませんので、②に行きます。
⓶i=2を代入すると、
sht_1 .Cells(2,2)=4 となります。
つまりA2に4という数字が書き込まれます。
③n=n+1 はn=3
つまり、次の数になる、このエクセルでは、次の3行目にいきます。
⓸までいったので⓵に戻ります。
LOOP 3週目 i=3 のとき
※同じことなので、読み飛ばして構いません。
⓵i=3なので、Cells(3,1)つまりA3セルを見ます。3という数字が入っているため空欄ではありませんので、②に行きます。
⓶i=3を代入すると、
sht_1 .Cells(3,2)=6 となります。
つまりA3に6という数字が書き込まれます。
③n=n+1 はn=4
つまり、次の数になる、このエクセルでは次の4行目にいきます。
LOOP 4週目 i=4 のとき
※同じことなので、読み飛ばして構いません。
⓵i=4なので、Cells(4,1)つまりA4セルを見ます。4という数字が入っているため空欄ではありませんので、②に行きます。
⓶i=3を代入すると、
sht_1 .Cells(4,2)=8 となります。
つまりA4に8という数字が書き込まれます。
③n=n+1 はn=5
つまり、次の数になる、このエクセルでは次の5行目にいきます。
LOOP 5週目 i=5 のとき
※そろそろ注意してください。
⓵i=5なので、Cells(5,1)つまりA5セルを見ます。5という数字が入っているため空欄ではありませんので、②に行きます。
⓶i=3を代入すると、
sht_1 .Cells(5,2)=10 となります。
つまりA5に10という数字が書き込まれます。
③n=n+1 はn=6
つまり、次の数になる、このエクセルでは次の6行目にいきます。。。。?
おーっと危ない!!
LOOP 6週目 i=6 のとき
⓵i=6なので、Cells(6,1)つまりA6セルを見ます。
空欄です。なので、ここでLOOP終了です!!
コメント