「StiLL」 デザイン情報223 StiLLコマンド-- 処理が遅い原因と改善方法
                             
  【テーマ】
今回は、StiLLで作成したプログラムで、処理に時間がかかるケースについて、確認するところと改善する方法を解説します。
    【方法】
画面描画について
数式の多用について
データ取得・抽出時の項目数について
繰返し実行について
    【参考】
数式以外にも書式の多用にご留意ください。
 
           
                             
■ 今回の内容                        
作成したプログラムがなかなか終了しない、時間がかかる、ということがありませんか。
複雑で長いプログラムになれば、時間がかかる事こともありますが、今回は、テーマ別に確認するポイントと改善案をご紹介します。
【○○処理連続実行プログラム】
砂時計 30% 単色塗りつぶし
【チェック1】 実行時、画面が動いていますか? ⇒ 画面描画を停止する              
連続実行処理を行っている時、その処理経過が画面に表示されていると、少なからず時間がかかっています。
その場合、「画面描画OFF(DispOff)」ボタンを連続実行の最初に実行し、連続実行中の画面を停止させることで、
連続実行中の処理速度を改善することが見込まれます。
速度計: 低速 単色塗りつぶし,速度計: 低速 単色塗りつぶし,付箋 単色塗りつぶし,矢印付きの円 単色塗りつぶし,付箋 単色塗りつぶし,矢印付きの円 単色塗りつぶし,No の記号 単色塗りつぶし
!ポイント
画面描画停止は、連続実行処理終了後、自動的に解除(再開)されます。
【チェック2】 データを参照する数式がどれだけありますか? ⇒ 計算を止める または 数式を減らす      
データの取得・クリアなどを行う場合、そのデータを参照している数式が大量にあると、EXCELの再計算で時間がかかることがあります。
改善方法としては、「計算を止める」「数式を減らす」方法を考えます。
<計算を止める>
データ処理実行前に計算を止めるには、「手動計算(CalcMan)」ボタンを実行します。
データ処理実行後は、必ず「自動計算(CalcAuto)」ボタンを実行し、再計算をしてください。
<数式を減らす・消す>
データを参照する大量の数式が同じ内容である場合、予め数式を持たず、データ処理後にプログラムで数式をセットすることで、
処理スピードの改善が見込まれることがあります。
数式をセットするには、「セルデータコピー(BtCellCopy)」「セル値セット(BtSetValue)」ボタンなどがあります。
実行前イメージ
部署名 計画 実績
=VLOOKUP( =SUMIF(・・ =SUMIF(・・
     
     
     
     
     
     
実行後イメージ
部署名 計画 実績
部署A 10,000 12,568
部署B 15,000 8,255
部署C 12,000 16,524
部署D 25,000 26,521
部署E 30,000 12,542
部署F 14,000 9,565
部署G 22,000 15,425
!ポイント
「セルデータコピー(BtCellCopy)」ボタンや「セル値セット(BtSetValue)」ボタンには、数式を値に変更する方法があります。
数式の結果が変更しないものであれば、数式を値に変換することで、以降再計算することがなくなり、さらに時間短縮が見込まれます。
値化の方法は、それぞれStiLLボタンヘルプをご参照ください。
【チェック3】 「Excelデータ取得(BtMerge)」・「Excelデータ抽出(BtRecordQuery)」を使っている場合    
「Excelデータ取得(BtMerge)」・「Excelデータ抽出(BtRecordQuery)」ボタンでは、データの取得・抽出する項目に加えて、
任意の項目を数式で作成することができます。
その任意の項目を合わせた(項目式といいます)数が多数ある場合、ボタンの実行に時間がかかる場合があります。
<項目式で数式を使わない>
数式を使う項目が多く、実行に時間がかかる場合は、この数式部分(該当無し項目)を空白にし、別個に数式を用意します。
データ取得・抽出後、【チェック2】と同じように、数式を後からデータに貼り付けることで、全体的な実行速度の改善が見込まれます。
データ取得・抽出直後イメージ(データのみ)
数式部分をコピー(データの完成)
!ポイント
「セルデータコピー(BtCellCopy)」ボタンで数式をコピーするとき、項目式と同じ列数をコピー元に指定します。
データ取得・抽出ボタンの方でデータ部分に範囲名(見出しを含まず)をつけ、その範囲をコピー先に指定します。
「空白を無視する」オプションをつけることで、数式部分のみコピーすることが可能になります。
(例では、「部署名」は無視され、上書きしません)
【チェック4】 「繰返し実行(BtLoop)」ボタンで一行ずつ処理していませんか ⇒ 一回で実行できないか考える    
VBAなどでデータの加工処理を行う場合、一行毎の処理をループさせる事が多いと思います。
StiLLボタンで同じ事を行うと、メモリ上で行うVBAと比べて実行速度は遅くなることが考えられます。
このような場合は、【チェック2・3】のようにデータ範囲を指定する方法で、一回でデータ作成できないか、再考してみてください。
■ 参考                          
今回は主に数式が原因となるケースを取り上げました。
数式以外にも、罫線を含む書式の多用などが原因で、処理の遅延を引き起こすことも考えられます。
数式や書式は、実行時にStiLLで作成し、いかに元のブックの容量を「軽く」するかを考えることで、
軽快で簡素なプログラムに繋がると思います。
以上
(各ボタンの設定内容の詳細はStiLLヘルプをご確認ください)  
Copyright(C) アイエルアイ総合研究所 無断転載を禁じます