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