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

ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
最終更新日:2019-06-16

エクセル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のページです、ここも必読です。
配列を使う事の有効性等、かなり参考になるはずです。

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

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


記述による処理速度の違い
記述の違いで、どの程度処理速度に変化があるかを検証します。どのような記述が処理速度に影響するかという点を分かり易くするために、あえて極端なマクロVBAで検証をしています。※本記事は2013年に書いたものを2019/2に再計測しつつ一部書き直したものです。
速度比較決定版【Range,Cells,Do,For,For Each】
何度も言っているのですが、RangeとCellsでどっちが早いか、とか、DoとForとFor Eachでどれが早いか とか、そもそも、その議論がナンセンスなんです。以下のコードと結果を見て、各自で判断して下さい。巷の議論が、いかに無意味で、実は良く解っていないのだと言う事を、理解してもらいたい。

Findメソッドを私が使わない理由
vbafindでの検索が極めて多く、Findメソッドは検索からの流入ではトップクラスです、アクセス解析で分かった事ですが正直少し戸惑っています。なぜなら私はFindメソッドをほとんど使いません、Match関数や配列を使って処理したほうが高速かつ確実に動作するからです。


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


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

まずやるべき事は、

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

この部分になります。

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

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

Application.ScreenUpdatingの停止
Applicationは、Excel全体をあらわすオブジェクトです、つまり、エクセルそのものだと考えて下さい。ここでは、そのプロパティの一部を紹介します。ここで紹介するApplicationのプロパティはほんの一部です。
Application.Calculationを手動
Applicationは、Excel全体をあらわすオブジェクトです、つまり、エクセルそのものだと考えて下さい。ここでは、そのプロパティの一部を紹介します。ここで紹介するApplicationのプロパティはほんの一部です。
セルを配列に入れる
セル範囲をVariant型変数に入れる事で、配列を作成することができます。また、配列をセル範囲にまとめて出力する事も出来ます。これは、マクロVBAを高速処理したい時の必須テクニックになります、マクロの処理が遅い場合は、このテクニックが使えないか検討してください。

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

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

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

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


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

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


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

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

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


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

マクロVBAの高速化・速度対策の具体的手順と検証
マクロVBAが遅い・重いという相談が非常に多いので、遅い・重いマクロVBAを高速化・速度対策する場合の具体的な手順をここに解説・検証します。マクロVBAの速度に関する記事は既にいくつか書いています。特に、以下はぜひお読みください。

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

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

大量データで処理時間がかかる関数の対処方法(WorksheetFunction)
大量データ処理において、一般的な速度対策をやってさえ、時に何時間もかかってしまう事があります、そういう場合でも、多くの場合は何らかの対策があるものです、個別のロジックの記述でこれに対応する一つの有効なマクロVBAコ-ドについて解説します。以下の例で解説します。

大量データにおける処理方法の速度王決定戦
VBAで自動化したが、大量データ処理に時間がかかってしまう… そんな悩みが非常に多いようです、そこで、各種処理方法の速度比較を行い、どの処理方法が最も速いかを検証します。つまり、処理方法の速度王決定戦です。検証する題材としては、最も一般的な集計で行います。

遅い文字列結合を最速処理する方法について
VBAは遅い… よく聞くことですが、確かに普通にコード記述しているととても遅いことがあります、その代表の一つに、文字列結合があります、文字列結合を最速処理する方法について解説します。そもそも文字列結合は、なぜ遅いのか、String型(可変長文字列)についての基礎知識が必要です。

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



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

最終行の判定、Rangeオブジェクトと配列、高速化の為に
記述による処理速度の違い
速度比較決定版【Range,Cells,Do,For,ForEach】
エクセルVBAのパフォーマンス・処理速度に関するレポート
VBAのFindメソッドの使い方には注意が必要です
WorksheetFunction.Matchで配列を指定した場合の制限について
マクロVBAの高速化・速度対策の具体的手順と検証
動的2次元配列の次元を入れ替えてシートへ出力(Transpose)
大量データで処理時間がかかる関数の対処方法(SumIf)
大量データにおける処理方法の速度王決定戦
遅い文字列結合を最速処理する方法について


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

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



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

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


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




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