循環参照を極める |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
(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行目までの動きを表に示しておく。本当にここが肝心!!ここがわかれば後は楽!! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
【´・ω・`】:8行目は答えを表示しているだけ。 (●`ε´●):Forループの仕組みはわかったけど、これと循環参照との関係はどうなっているんだ? 【´・ω・`】:今回はここまで。それは次回ね。 |
(初出 2006/03/14)
コメント