循環参照を極める
|
(1)1から10までの整数の和を求める
循環参照を使わないとしたらどのような手が考えられるだろうか?
方法1) 手順 1.オートフィルを利用してA列に1から10までの整数を入力。 2.適当なセルに=SUM(A1:A10)と入力。
方法2) 1からnまでの整数の和を求める公式を利用する。
参考:(1からnまでの整数の和)=n(n+1)/2
方法3)VBAを使う。例えばForループを使うならば以下のようなコードが考えられる。
|
|
(●`ε´●):おい、循環参照がテーマなのになんで関係ない方法を挙げたんだ?
【´・ω・`】:実は方法3のVBAによるやり方と同じ考えを使うからなんだ。
(●`ε´●):おいら、VBAのForループなんて知らないぞ!!
【´・ω・`】:じゃあ、簡単にこのコードの意味を説明しておこう。こんどは説明の便宜上、行番号をふっておいた。
|
|
【´・ω・`】::1行目はマクロの名前。この1行目と9行目のEnd Subに挟まれた部分がマクロの本体だ。基本的にはマクロは上に書いてあるコードから、下に向かって順番に実行される。2行目、3行目はマクロの中で使う変数の定義だ。2行目ではiという変数を整数値として使いますよ、と宣言しているわけだ。
(●`ε´●):じゃあ、3行目ではAnsという変数を整数値として使いますよ、と宣言しているというわけか?
【´・ω・`】:うん、そういうこと。このAnsを答えを入れる入れ物(変数)にするつもりで、このコードを書いた。まず、4行目でこの入れ物の中に0を入れた。入れ物の中を空にしたわけだ。
(●`ε´●):それから?
【´・ω・`】:次は5行目。ここからが肝心だ。5行目のForループの書式は以下のようになる。
|
|
【´・ω・`】:上の図とコードの5~7行目をよく見比べてほしい。
(●`ε´●):変数がi、開始値が1、終了値が10、(何かのコード)がAns=Ans+iというわけだな?
【´・ω・`】:VBAではこのようなコードを記述すると、変数を開始値から終了値まで、変数の値を1ずつ増やしながら、ForとNextの間のコードを繰り返し実行する。
(●`ε´●):具体的に言うとどういうことだ?
【´・ω・`】:iを1から始めて10まで、つまり1,2,3,4,5,6,7,8,9,10と変化させながら、Ans=Ans+iを繰り返し実行するわけだ。
(●`ε´●):ということはAns=Ans+iが10回繰り返されるということだな?
【´・ω・`】:そう。ところでここでAns=Ans+iに触れておくけどここでの「=」は等号じゃないからね。
(●`ε´●):???
【´・ω・`】:ここでの「=」は代入記号なんだ。
(●`ε´●):???
【´・ω・`】:例えばこのAns=Ans+iが実行される前のAnsの値が3、iの値が2だったとしよう。Ans=Ans+iが実行されるとまず、式の右辺が処理される。つまり、3+2が計算される。そして次にその計算結果の5が左辺のAnsに代入され、実行前に3だったAnsの値が実行後は5になるというわけだ。 ここで5行目から7行目までの動きを表に示しておく。本当にここが肝心!!ここがわかれば後は楽!! |
|
iの値 |
左辺のAnsの値 |
=Ans+i |
右辺のAnsの値 |
1回目 |
1(開始値) |
1 |
=0+1 |
0(初期値) |
2回目 |
2 |
3 |
=1+2 |
1 |
3回目 |
3 |
6 |
=3+3 |
3 |
4回目 |
4 |
10 |
=6+4 |
6 |
5回目 |
5 |
15 |
=10+5 |
10 |
6回目 |
6 |
21 |
=15+6 |
15 |
7回目 |
7 |
28 |
=21+7 |
21 |
8回目 |
8 |
36 |
=28+8 |
28 |
9回目 |
9 |
45 |
=36+9 |
36 |
10回目 |
10(終了値) |
55(答え) |
=45+10 |
45 |
|
【´・ω・`】:8行目は答えを表示しているだけ。
(●`ε´●):Forループの仕組みはわかったけど、これと循環参照との関係はどうなっているんだ?
【´・ω・`】:今回はここまで。それは次回ね。 |
最近のコメント