VBA性能向上委員会VBA性能向上委員会VBAプログラミングの実行速度に関して、より速い性能を求めて徹底検証をします。セルのコピーセルのコピー[A1]の値が条件に合致したら[B1]にコピーする。これを[Ax]まで繰り返す。VBAプログラムでは、ごく一般的なロジックです。一般的なロジックだからこそ、性能を見直すべき大きなポイントでもあります。今回はセルの値をコピーする性能について、検証します。For文で、Valueを代入アドレス指定して、Valueを代入アドレス指定して、Copyメソッドアドレス指定して、PasteSpecialメソッド[A:A]の値を[B:B]にコピーするロジックを、以上4つのパターンに分けて検証します。1)で隣のセルに値を代入しています。代入の前に、条件式を入れると、どこにでもある一般的なロジックですね。Range("A:A").Valueごく単純な値の代入です。条件がなくコピー元セル範囲とコピー先セル範囲が決まっている場合や、条件で絞った後に一括でコピーする場合等で、この様な書き方になると思われます。Range("B:B")値の代入ではなく、セルのコピー&ペーストをする方法です。RangeオブジェクトのCopyメソッドを使用し、引数にコピー先セルを指定しています。EXCELで操作する際は、セルをコピーして、ペースト先セルを選択してEnterキーを押したときと同じ動きをします。False形式を選択して貼り付けをする方法です。コピー元のセルのRangeオブジェクトのCopyメソッドを実行した後に、コピー先のセルのRangeオブジェクトのPasteSpecialメソッドを実行する流れとなります。Falseにてコピー状態を解除する必要があります。ここでは、よく使用するであろう、値の貼り付けと書式の貼り付けの両方を実行し、検証をします。上記4つのパターンについての実行結果は以下の通りです。今回の検証によりわかることは、ループさせて一つ一つコピーするより、一括でコピーするほうが速いということです。最速はCopyメソッドで、For文と比べて0.4%も速くなっています。5分かかっていたマクロが、1秒で終わります。絶対に対応すべき点の一つでもあります。