【第58回】ロータス博士のWinActor塾~多重ループ 実践編Ⅰ
さて、今日はみなさんお待ちかねの多重ループの実践編じゃ!
前半、後半で分けて説明をしていくぞ。今回は前半じゃな。
この前は基礎を学んだが、もし忘れてしまったら復習しておくのじゃぞ。
前回の記事はこちら
例題シナリオを作るって言ってましたよね!
楽しみです!
うむ!前回、表と相性が良いと言ったのを覚えておるかな?
表といえばアレ・・・今日はエクセルでアレを作成するぞ。
アレ・・・なんだろう。
でもどうせすぐ次の見出しでわかりますよ。
確かに。もう少しもったいぶらせて欲しいもんじゃ。
とにかく今日はシナリオを作るから頑張るのじゃぞ!
九九表の作成
シナリオ概要
今回は多重ループを使用して、九九表を作成していきます。
表計算といえばExcelですね。WinActorで九九を計算し、その結果をExcelに入力していくシナリオを作成します。
次のような結果になるシナリオを一緒に考えてみましょう。
改めて見ると掛け算九九の表って
まさに表です!って感じできれいに並んでますね。
そうじゃな。しかも表の縦と横の関係がハッキリしておる。
これはプログラミングで2重ループを学ぶときにもよく使われるのう。
とにかく多重ループは処理の流れを見失わないことが大事じゃ。
R1C1形式について
今回作成するシナリオではエクセル操作時にR1C1形式を使います。
R1C1形式とは、セルの番地を示す形式のひとつで
普段使っているA1,B1などのものをA1形式、R1C2などと表記するものをR1C1形式と呼びます。
A1形式では列をA,B,C,D...と数えていきますが、R1C1形式では列も数字で1,2,3...と数えます。
A1は、ローマ字のほうが列というルールがあるので問題ありませんが、どちらも数字となるとどうでしょう。
112という数字を考えてみると1,12で区切るのか、それとも11,2で区切るのか、行と列の境目がわかりません。
そのためR1C1形式では行の頭にR、列の頭にCを付けて表します。
行は英語でRow。頭文字をとって「R」じゃな。
列は英語でColumnじゃから「C」となる。
R1C2は1行目の2列目、つまりB1と同じ場所を示すのじゃ。覚えたかな?
えーと、どっちが横でどっちが縦か・・・
これこれ、しっかりするんじゃ!
列が進むとセルは横に進んでいくぞ!A,B,C...のほうじゃな。
行はいつも通り1,2,3...じゃぞ!
この法則に従うと、A1形式とR1C1形式はお互いに変換することができます。
いくつか例を出してみましょう。
A1 = R1C1
B1 = R1C2
C5 = R5C3
あ・・・なんとか覚えられそう。
A1だと列が左側なのに、R1C1では列が右側なんですね。
C1R1にしてくれたらわかりやすいのに・・・。
ちなみに今回はR1C1形式を使いはするが
どの番地がいくつ、なんて考える必要はないぞ。
そこはWinActorがやってくれるからのう。
え!覚えて損した!
じゃあもう次いきましょうよ!
いや、そこは基礎知識としてじゃな・・・。
覚えて損ということはない。今回は考える必要がないだけで、いつの日か役に立つじゃろう。
とりあえず行列の表記の仕方はこの2種類があると覚えておいて欲しい。
シナリオ全体の流れを考えよう
シナリオの全体像を捉える
まずシナリオを作り始める前に、開始から終了までの流れを大まかに決めましょう。
今回の場合はシンプルで、次のようなイメージになります。
まあ今回のシナリオは多重ループを使うというだけで、
全体的に見ればやることは少ないからのう。
本当だ。図にするとすごく簡単そうですね。
実際簡単じゃよ。
では一旦ループ以外の部分を作ってしまおう。
ループ以外でやることはExcelファイルを開いて準備することと
最後に保存して閉じることだけです。
ここでは「九九シート.xlsx」という空のエクセルファイルを用意しました。
「Excel開く(前面化)」のパスには「エクセルファイルパス」という変数を作成し、指定しています。
初期値は九九シート.xlsxの格納先が相対パスで記入されています。
絶対パス、相対パスについての記事はこちら
また「Excel操作(上書き保存)」で結果を受け取るために必要な変数「エクセル閉じ結果」も用意しています。
ここまで一緒に学んできた皆さんならすぐにできるはずじゃ。
となると、考えるべきはループの部分だけじゃな。
ロータス君、お主はどうする?
博士・・・僕はもう知っています。
前回の授業をまじめに受けましたからね。
これは2重ループを使うんですよ!!
うむ、そうじゃな!むしろ違ったらタイトル詐欺になる・・・。
では2重ループでどう処理するか、前回と同じように図にして考えてみよう。
ループ処理について考える
掛け算九九の表は、縦横9×9のマスに収まっています。
これは縦のループと横のループにそれぞれ分けられそうですね。
あ、確かに!似たようなやつ前回やりましたよね!
9×9だから、縦のループ回数は9で、横のループ回数も9ですね!
おお、やるのう!その通りじゃ。
さて、2重ループということはループに親子関係が存在することなるわけじゃが
どちらを親ループにしようかのう。
うーん、どっちが親のほうが良いっていうのはあるんですか?
ものによってはあるが、九九の場合はぶっちゃけどちらでも良いのう。
こういう場合はより実作業や直感に近い動きに寄せるのじゃ。
せっかくじゃから両方の動きをみて比べてみよう。
まずは縦方向を親ループとした場合を見てみましょう。
親のループの中に子ループが入っているので、親の1回目のループで子は9回ループします。
そして親の2回目のループの中でも、子はもう一度9回ループします。
どのような形のループでも同じですが、子ループの中の処理が先に行われますので
横を子ループにした場合はこのように左から右へ子ループが9回動いてから
親ループによって縦(上から下)に流れが動きます。
逆の場合はこのようになります。
今度は親ループを横にした場合です。
当然、子ループから処理が行われるので上から下への流れが先に実行されます。
親子関係を変えるとこのように処理の順番が変わるのじゃ。
九九の表は実はどちらが親でも作ることができるが
処理の順序が決められているものなどは、都度検討して適切なほうを選ぼう。
これを見ると1の段、2の段で順番になってるほうが自然ですよね。
親ループが縦、子ループが横でいきましょう!
まあ、九九の表を縦に計算してる子を見たことはないし、直感に反するのう。
よし、ここまで決まればあとは計算と入力じゃな!
とりあえずループだけ作ってしまおう。
先に作成していたシナリオのExcelを開く~上書き保存して閉じるの間に2重ループを入れましょう。
親ループ、子ループともにループ回数は9回なので、プロパティ設定のループ回数を9としています。
これでシナリオの全体的なフローは出来上がりました。
あとはここに実際の計算やセル操作などの処理を追加していきます。
このまま最後まで行きたいところじゃが
ちょっとここから長いので今日はおしまいにして休憩じゃ!
え!ここからがいいところなのに!
もうループの枠もできてるんですから、すぐじゃないですか?
そう思うじゃろ?
計算だけならまだ良いがセルの移動も伴うからのう。
もう少し詳しく説明しながら進めたいのじゃ。
えー、でも間が空くと忘れちゃいますよ。
せっかくこんなにやる気なのに。
いつもやる気を出せと言っているわしがまさかこんな形で下剋上されるとは・・・。
次は早めの更新じゃから、すまないが待っていて欲しい。
その間、このシナリオの枠組みを使ってどう計算して入力するか考えてみるのじゃ。
そういえば自分で考えることも大切って昔聞いたような・・・。
仕方ないですね!許しましょう。
「今回はここまで」がこんなに責められるなんて・・・。
とにかく次回をお楽しみに、じゃ!
関連記事こちらの記事も合わせてどうぞ。
2024.11.05
【第105回】ロータス博士のWinActor塾~新しい画像マッチング画面
2024.09.27
【第104回】ロータス博士のWinActor塾~ガイド利用シナリオ(作成編)
2024.09.10