「StiLL」 デザイン情報180 StiLLコマンド--条件付き繰返し処理の構築 | ||||||||||||||||||||||
【テーマ】 繰返し処理を条件で抜け出したいときってありませんか?今回はその構築方法をご紹介します。 | 【方法】「ボタン連続実行(BtPush)」の中でセルリンクボタン「繰返し実行(BtLoop)」を用い繰返し回数および条件の一致をセルリンクボタン「条件分岐実行(BtPushIf)」で判定して次に実行させるボタンを分岐します。繰返しは「ボタン連続実行(BtPush)」自身の再帰呼び出しを行うことで実現します。 | 【参考】サンプル例をご用意しておりますのであわせてご参照ください。 | ||||||||||||||||||||
対応Ver. :StiLL-XV1.0
以降 対応種類:StiLL Dev・Pro |
対応Ver. :StiLL-XV1.0
以降 対応種類:StiLL Dev・Pro |
対応Ver. :StiLL-XV1.0
以降 対応種類:StiLL Dev・Pro |
||||||||||||||||||||
■ 今回の内容 | ||||||||||||||||||||||
繰返し処理の途中で、とある条件のときに繰返し処理から抜け出す方法をご紹介します。 | ||||||||||||||||||||||
セルリンクボタンの 「繰返し実行(BtLoop)」 では繰返しを実行途中で抜け出せません。 | ||||||||||||||||||||||
そこで、今回はセルリンクボタン 「ボタン連続実行(BtPush)」 で繰返し処理を構築する考え方をご紹介します。 | ||||||||||||||||||||||
サンプル例をご用意しておりますのでご参照ください。 | ||||||||||||||||||||||
構築のポイント | ||||||||||||||||||||||
1)(BtPush)自身の 『再帰呼び出し』 による条件付き繰返し処理を構築します。 | ||||||||||||||||||||||
※ 『再帰呼び出し』 とは処理しているプログラム(ここではBtPush)が自分自身を呼び出すことです。 | ||||||||||||||||||||||
2)『再帰呼び出し』 を繰返すとメモリを消費するので呼び出せる回数に限界があります。 | ||||||||||||||||||||||
その為、繰返しの間にセルリンクボタンの 「繰返し実行(BtLoop)」 を挿入して繰返しの回数を補います。 | ||||||||||||||||||||||
3)ただし前述のとおり(BtLoop)は途中では抜け出せないので一回の繰返し回数を少なく設定して、 | ||||||||||||||||||||||
条件を満足した場合に繰返しを抜け出すまでの時間ロスを短くします。 | ||||||||||||||||||||||
4)上記の(BtLoop)を複数(BtPush)に設定することで時間ロスを短縮しながらも全体の繰返し回数を増やします。 | ||||||||||||||||||||||
また(BtPush)の設定では IF関数を使い条件を満足した場合は(BtLoop)を実行しないようにしここでも時間ロスを抑制します。 | ||||||||||||||||||||||
5)条件を満足しない状態で永久ループに陥らないよう、繰返し回数でも抜け出せる仕組みを施します。 | ||||||||||||||||||||||
以下に全体図(ボタン構成)を示します。 | ||||||||||||||||||||||
(全体図)このサンプルでは条件を満足しない(セルG18=1)ときの繰返しの最大数を100万回としています。 | ||||||||||||||||||||||
※総合判定(セルG18) には、式=IF(AND(F17<=G17,F19=1),1,9) を入力しておきます。 | ||||||||||||||||||||||
![]() |
||||||||||||||||||||||
■ ボタンの説明 | ||||||||||||||||||||||
【図の設定および説明と合わせてお読みください】 | ||||||||||||||||||||||
・@ボタン連続実行(BtPush):BTN 1 の設定 (開始ボタン) | ||||||||||||||||||||||
このボタンには次のボタンを設定しています。 | ||||||||||||||||||||||
1. 画面表示停止(DispOff):STILLDISPOFF | ||||||||||||||||||||||
2. カウンタ初期化(BtSetValue):テキスト 1 | ||||||||||||||||||||||
3. ボタン連続実行(BtPush):BTN 2 | ||||||||||||||||||||||
4. ボタン連続実行(BtPush):次の処理 | ||||||||||||||||||||||
![]() |
||||||||||||||||||||||
・カウンタ初期化(BtSetValue):テキスト 1 の設定 | ||||||||||||||||||||||
繰り返しの初期値として 1 を セルF17 と セルF19 に設定します。 ⇒ | ||||||||||||||||||||||
・ボタン連続実行(BtPush):BTN 2 の設定 | ||||||||||||||||||||||
このボタンには次のボタンを設定しています。 | ||||||||||||||||||||||
1. ボタン連続実行(BtPush):BTN 3 | ||||||||||||||||||||||
2. 条件分岐実行A(BtPushIf):フローチャート 2 | ||||||||||||||||||||||
・ボタン連続実行(BtPush):BTN 3 の設定 | ||||||||||||||||||||||
このボタンは(BTN 4)の実行を設定しています。 | ||||||||||||||||||||||
セルD23 の式: ="BTN 4," & F14 | ||||||||||||||||||||||
セルD24 から セルD27 には セルD23を参照する式、=D23 を入力しています。 | ||||||||||||||||||||||
・ボタン連続実行(BtPush):BTN 4 の設定 | ||||||||||||||||||||||
このボタンは(BTN 5)の実行を選択する次の式を設定しています。 | ||||||||||||||||||||||
セルG23 の式: =IF(F19=1,"BTN 5,"&F14,"") | ||||||||||||||||||||||
セルG24 から セルG27 には セルG23を参照する式、=G23 を入力しています。 | ||||||||||||||||||||||
・繰返し実行(BtLoop):BTN 5 の設定 | ||||||||||||||||||||||
このボタンには次のボタンの実行を設定しています。 | ||||||||||||||||||||||
条件分岐実行@(BtPushIf):フローチャート 1 | ||||||||||||||||||||||
またこのボタンの 「終了数値」 を繰返し回数の基準としますので、「初期数値」 および 「増減数値」 には 1 を設定します。 | ||||||||||||||||||||||
※「終了数値」 は後段の 「ご参考までに」 をお読みいただき状況に合わせた回数を設定します。 | ||||||||||||||||||||||
「リンクするセル」 は設定しません。(設定するとパフォーマンスが落ちます) | ||||||||||||||||||||||
・条件分岐実行@(BtPushIf):フローチャート 1 の設定 | ||||||||||||||||||||||
このボタンは図に示す通り、セルG18 の値を判定して次の通り実行するボタンを選択します。 | ||||||||||||||||||||||
セルG18 = 1 の時、ボタン連続実行(BtPush):BTN 6 を実行。 | ||||||||||||||||||||||
セルG18 ≠ 1 [それ以外] の時、何もしない(None):BTN 9 を実行。 | ||||||||||||||||||||||
![]() |
||||||||||||||||||||||
・ボタン連続実行(BtPush):BTN 6 の設定。 | ||||||||||||||||||||||
このボタンに設定した処理が、条件を満足する(セルF19 ≠ 1)まで、または 「最大繰返し回数」 まで繰返し実行されます。 | ||||||||||||||||||||||
ここでは以下のボタンを設定しています。 | ||||||||||||||||||||||
1. ボタン連続実行(BtPush):BTN 7 ・・・ 繰返す処理を設定 | ||||||||||||||||||||||
2. セルデータコピー(BtCellCopy):カウントUp (繰返し回数) | ||||||||||||||||||||||
※セルF18 の式: =F17+D37 | ||||||||||||||||||||||
・ボタン連続実行(BtPush):BTN 7 の設定。 | ||||||||||||||||||||||
ここで繰返す処理を設定します。 | ||||||||||||||||||||||
このボタンの処理で条件を満足した場合、 セルF19 に値(例: 9)を設定するようにします。 | ||||||||||||||||||||||
この設定で、セルG18 「総合判定」 の値が 9 となり繰返しから抜け出ます。 | ||||||||||||||||||||||
・条件分岐実行A(BtPushIf):フローチャート 2 の設定 | ||||||||||||||||||||||
このボタンは図に示す通り、セルG18 の値を判定して次の通り実行するボタンを選択します。 | ||||||||||||||||||||||
セルG18 = 1 の時、ボタン連続実行(BtPush):BTN 2 を実行。 ・・・ 繰返しの継続(再帰呼び出し) | ||||||||||||||||||||||
セルG18 ≠ 1 [それ以外] の時、何もしない(None):BTN 9 を実行。 ・・・ 繰り返しの終了 (BTN 8 「次の処理」 に進む) | ||||||||||||||||||||||
![]() |
||||||||||||||||||||||
・ボタン連続実行(BtPush):BTN 8 の設定。 | ||||||||||||||||||||||
繰返しを抜け出た後に実行する処理を設定します。 | ||||||||||||||||||||||
以上のようなボタン構成で条件を満足したときに繰返し実行から抜け出す処理を構築できます。 | ||||||||||||||||||||||
■ ご参考までに | ||||||||||||||||||||||
1.繰返し回数(セルG17)を小さくする場合は以下の手順で行います。 | ||||||||||||||||||||||
@ 「BTN 5(BtLoop)」 の 「終了数値」 を小さくする。 | ||||||||||||||||||||||
200 ⇒ 100 ⇒ 50 など | ||||||||||||||||||||||
A 「BTN 3(BtPush)」 の 「設定数」 を削減する。 | ||||||||||||||||||||||
例)設定数を1つに削減 | ||||||||||||||||||||||
![]() |
||||||||||||||||||||||
(BTN 3) | ||||||||||||||||||||||
B 上記の 「終了数値」 と 「設定数」 の組み合わせ例 | ||||||||||||||||||||||
@終了数値 | A設定数 | 最大繰返し回数 | 条件が真の時の時間ロス | |||||||||||||||||||
1 | 1 | 1000 | 1秒以内 | |||||||||||||||||||
5 | 1 | 5000 | ||||||||||||||||||||
10 | 1 | 10000 | ||||||||||||||||||||
10 | 3 | 30000 | ||||||||||||||||||||
10 | 5 | 50000 | ||||||||||||||||||||
50 | 2 | 100000 | 2.5秒以内 | |||||||||||||||||||
100 | 3 | 300000 | 5秒以内 | |||||||||||||||||||
100 | 5 | 500000 | ||||||||||||||||||||
200 | 5 | 1000000 | 10秒以内 | |||||||||||||||||||
注)「条件が真の時の時間ロス」とは、 | ||||||||||||||||||||||
条件を満足したとき、繰返しから抜け出るまでの見込み最大秒数です。 | ||||||||||||||||||||||
※全体の処理時間ではありませんのでご留意ください。 | ||||||||||||||||||||||
※見込み最大秒数はお使いのパソコン等の環境により変動します。 | ||||||||||||||||||||||
サンプル例をご用意しておりますのでご参照ください。 | ||||||||||||||||||||||
(各ボタンの設定内容の詳細はStiLLヘルプをご確認ください) | ||||||||||||||||||||||
Copyright(C) アイエルアイ総合研究所 無断転載を禁じます | ||||||||||||||||||||||