「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) アイエルアイ総合研究所 無断転載を禁じます