| 「StiLL」 デザイン情報223 StiLLコマンド-- 処理が遅い原因と改善方法 | |||||||||||||||||||||||||||||||||||||
| 【テーマ】 今回は、StiLLで作成したプログラムで、処理に時間がかかるケースについて、確認するところと改善する方法を解説します。 |
【方法】 画面描画について 数式の多用について データ取得・抽出時の項目数について 繰返し実行について |
【参考】 数式以外にも書式の多用にご留意ください。 |
|||||||||||||||||||||||||||||||||||
| ■ 今回の内容 | |||||||||||||||||||||||||||||||||||||
| 作成したプログラムがなかなか終了しない、時間がかかる、ということがありませんか。 | |||||||||||||||||||||||||||||||||||||
| 複雑で長いプログラムになれば、時間がかかる事こともありますが、今回は、テーマ別に確認するポイントと改善案をご紹介します。 | |||||||||||||||||||||||||||||||||||||
| 【○○処理連続実行プログラム】 | |||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
| 【チェック1】 実行時、画面が動いていますか? ⇒ 画面描画を停止する | |||||||||||||||||||||||||||||||||||||
| 連続実行処理を行っている時、その処理経過が画面に表示されていると、少なからず時間がかかっています。 | |||||||||||||||||||||||||||||||||||||
| その場合、「画面描画OFF(DispOff)」ボタンを連続実行の最初に実行し、連続実行中の画面を停止させることで、 | |||||||||||||||||||||||||||||||||||||
| 連続実行中の処理速度を改善することが見込まれます。 | |||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
| !ポイント | |||||||||||||||||||||||||||||||||||||
| 画面描画停止は、連続実行処理終了後、自動的に解除(再開)されます。 | |||||||||||||||||||||||||||||||||||||
| 【チェック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) アイエルアイ総合研究所 無断転載を禁じます | |||||||||||||||||||||||||||||||||||||