ExcelマクロVBA技術解説 | エクセルVBAのパフォーマンス・処理速度に関するレポート | Excelマクロの問題点と解決策、エクセルVBAの技術的解説



最終更新日:2016-08-30

エクセルVBAのパフォーマンス・処理速度に関するレポート


ExcelのマクロVBAは遅い・重いと良く言われることが多いようですが、

マクロVBAが遅い・重いのではなく、その書かれたVBAコードが遅いのです。

正しい高速化・速度対策をしたコードなら、それほど遅くはありません。


むしろ、巨大なスプレッドシートを扱っている事を考えれば、驚異的なパフォーマンスとも言えるのです。

Excel 2010 のパフォーマンス: パフォーマンスの問題を最適化するヒント
 
  • 参照とリンク
  • 使用範囲の最小化
  • 追加データの許可
  • ルックアップ
  • 配列数式と SUMPRODUCT
  • 関数の効率的な使用
  • VBA マクロの高速化
  • Excel ファイル形式のパフォーマンスとサイズ
  • ブックのオープン、クローズ、保存、およびサイズ
  • 他のパフォーマンスの最適化
  • まとめ
  • その他の技術情報
言わずと知れた、Microsoft、MSDNです。
ここは必読です、ここを読まずして、エクセルのパフォーマンスについて語る事がないように。

VBA高速化テクニック
 
  1. 無駄な表示を止める
  2. 無駄なSelectをしない
  3. 余計なことはしない
  4. 何度も同じことをしない
  5. 個別に呼ばない
  6. 型を指定する
  7. 名前で呼ばない
  8. 標準のプロパティ
  9. 関数も使おう
  10. セルの指定方法
  11. セルを配列に入れる
  12. 文字列型関数を使う
Office TANAKAのページです、ここも必読です。
配列を使う事の有効性等、かなり参考になるはずです。

以下は、私が速度について記載したページです。

上記と合わせて、読んでおかれると良いと思います。

記述による処理速度の違い

速度比較決定版【Range,Cells,Do,For,For Each】

Findメソッドを私が使わない理由


いずれも多くの事が書かれており、結局何をどうすれば・・・

どうしたら、マクロVBAが速くなるのか、なかなか分からないかもしれません。

まずやるべき事は、

Excel 2010 のパフォーマンス・・・VBA マクロの高速化
VBA高速化テクニック・・・セルを配列に入れる

この部分になります。

マクロVBAが遅いと相談されて、コードを確認した場合、

ほとんどは、以下の対処で劇的に速くなります。

Application.ScreenUpdatingの停止
Application.Calculationを手動
セルを配列に入れる


また、単なるテクニックではなく、正しいロジック・アルゴリズムによっても大きく変わります。

【奥義】大量データでの高速VLOOKUP

この記事は、マクロVBAではなく、ワークシート関数についてですが、

考え方の問題として、非常に重要です。

データの検索はVBAでは頻繁に行われます。

データを並べ替え、適切なアルゴリズムで格段に速くなります。


エクセルのマクロVBAなんて、所詮この程度だろう・・・

とか思わないで、しっかり対処してみて下さい。

しっかり対処すれば、その速さに驚くはずです。


以下は、その後に速度関連で追加した記事です。

マクロVBAの高速化・速度対策の具体的手順と検証


上記の速度対策について、具体的なVBAコードで速度検証しています。
同じ処理をするVBAコードが、全部で11サンプル掲載しています。
遅いVBAがあるなら、そのコードは、この11サンプルのどのレベルなのかを見て下さい。
そして、それ以降の対策を考えてみましょう。

さらに、
上記の速度対策では語られていない速度アップ技術について、以下で解説しています。

大量データで処理時間がかかる関数の対処方法(WorksheetFunction)

大量データにおける処理方法の速度王決定戦

遅い文字列結合を最速処理する方法について


ここでの速度アップ技術は、VBAにおける究極の対策です。
理論は決して難しいものではありませんが、
このような技術を、時々で臨機応変に駆使出来ればプロレベルと言えるでしょう。




同じテーマ「ExcelマクロVBA技術解説」の記事

VBAのFindメソッドの使い方には注意が必要です
WorksheetFunction.Matchで配列を指定した場合の制限について
マクロVBAの高速化・速度対策の具体的手順と検証
動的2次元配列の次元を入れ替えてシートへ出力(Transpose)
大量データで処理時間がかかる関数の対処方法(WorksheetFunction)
大量データにおける処理方法の速度王決定戦
遅い文字列結合を最速処理する方法について

新着記事 ・・・新着記事一覧を見る

空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.定数と型宣言文字(Const)|ExcelマクロVBA入門



  • >
  • >
  • >
  • エクセルVBAのパフォーマンス・処理速度に関するレポート

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    ↑ PAGE TOP