2010年5月3日月曜日

Excelのマクロ実行は遅い理由2

原因3.マクロの作り方の問題
 どの開発ツールで作っても作り方を間違えていたり、
 そのツールにふさわしい作り方をしていなければ、
 パフォーマンスの悪いアプリケーションになります。

 具体的に、どこをどのようしすればよいかは、作者
 でないと分からない可能性があります。

 そのことをよくまとめているサイトがありました。

  Office TANAKA
  1. 表示を止めろ!
  2. Selectするな!
  3. 余計なことはするな!
  4. 何度も同じことを言わせるな!
  5. 個別に呼ぶな!
  6. タイプを指定しろ!
  7. 名前で呼ぶな!
  8. 標準のプロパティ
  9. 関数も使え!
  10. セルの指定方法
  11. セルを配列に入れる
  12. 文字列型関数を使う

 ここの内容はとても参考になります。

原因4.Excelの仕様上の問題

3つのカラクリがあります。
  • メモリー消費が多くなるカラクリ
  • 再計算処理のカラクリ
  • ファイルアクセスのカラクリ

  • メモリー消費が多くなるカラクリ
シートは列×行の大きさによって、展開するメモリーの使用量が変化します。
 これは、面積の公式(横×縦)と同じですので、面積が広ければ広いほど、
 必要になるメモリーも多くなります。

 行の扱い方は、実値です。
 実際にセルの書式や値が設定されている最終行までが有効範囲になります。

 列の扱い方は、予約値です。
 実際にセルの書式や値が設定されている最大列までが有効範囲になります。
 これは、最終行の最終列ではなく、最終行までの間に使われている最大列を
 列の最大列としているためです。

 ※ 列数が大きさに比例して、使用するメモリー量が増加します。


  • 再計算処理のカラクリ
さらに、シート数が増えると遅くなります。

 セル、条件付書式、入力規則、名前定義

 これらには、数式を設定できます。

 また、グラフ表示がある場合、参照している表の値が変化すると自動的に表示が変わります。

 これらは、再計算処理が動作することで可能になります。



 この再計算処理の標準では、全シートの再計算を行いますのでシート数が増え、数式を扱うセルなどが増加すると、再計算処理に時間がかかるようになり、結果的に遅くなります。


  • ファイルアクセスのカラクリ
セルの値を変更した時、編集中の内容をExcelは、Excelファイルのユーザーの見えない領域に保存します。

 つまり、Excelでの入力や編集作業を行うと、自動的にファイルアクセスが発生していることになります。

 なお、この機能により、Excelが以上終了した時に、Excelファイルを修復することができます。


一般的にメモリ内で処理するより、ハードディスクなどの記憶装置にアクセスする方が処理速度は遅いです。

実行するマクロによっては、これらの要因で実行に時間がかかることがわかります。