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)
大量データにおける処理方法の速度王決定戦
遅い文字列結合を最速処理する方法について

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

スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)
表示の固定|Google Apps Script入門(12月24日)
グラフ|Google Apps Script入門(12月21日)
入力規則|Google Apps Script入門(12月13日)
並べ替え|Google Apps Script入門(12月12日)
メモの挿入・削除と改行文字|Google Apps Script入門(12月6日)
リンクの挿入・編集・削除|Google Apps Script入門(12月6日)
セルに数式を入れる|Google Apps Script入門(12月1日)

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

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



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

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


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

    ↑ PAGE TOP