このページは「画面の更新を止めました。関数の自動計算もオフにしています。でもマクロが遅くてどうしようもないんです」という方むけのページです。
1,繰り返し構文の中で「値で張り付け」をしない。
Dim コピー元 As Range
Set コピー元 = 機能.範囲.S_範囲指定_四角(Cells(1, 1), Cells(1, 2))
Call 機能.範囲.C_コピペ(コピー元, Cells(1, 3), 値貼付)
セルの値だけコピペできればいいという場合、上記のような書き方では遅くなります。
C_コピペの値貼り付けの場合、アクティブセルが移動するため画面の更新が増える、コピーする、ペーストするという動作を行うからです。
セルの値を他のセルに代入する一番基本的な書き方と言えば以下の書き方でしたね。
これは値貼り付けと同じ効果です。
Cells(1,1).Value = Cells(1,3).Value
これを範囲指定にして、トーコンの便利機能で書くと以下のような記述になります。
Dim コピー元 As Range
Dim 貼り付け先 As Range
Set コピー元 = 機能.範囲.S_範囲指定_四角(Cells(1, 1), Cells(1, 2))
Set 貼り付け先 = 機能.範囲.S_範囲指定_四角(Cells(1, 3), Cells(1, 4))
貼り付け先.Value = コピー元.Value
注意点
● コピー元と貼り付け先の範囲の大きさを同じにすること
● .Valueを付けること
2,配列を使う
セルに値を書きこめば書き込むだけ遅くなります。
仮に一つのセルに値を書き込む時間が1秒かかるとして、千のセルに書きこむには単純計算で1000秒かかります。
しかしセルに書き込む値を配列に入れ、配列をセルに代入すれば千のセルに1秒で値を書き込むことができます。
詳しくは下記サイト等を参考にするか、IT3メンバーへお訊ねください。
http://officetanaka.net/excel/vba/variable/07.htm
https://vbae.odyssey-com.co.jp/column2/s21401.html
※外部サイトへ飛びます
3,データの形を整える
高速化が必要になるほどマクロを組んでいるのなら、マクロが組みやすいデータの形、組みにくいデータの形がわかってきたのではないでしょうか。
VBAはコード数が少なければ少ないほど処理が速くなるため、少ないコードで処理できるデータの形に変えることで実行速度が早くなります。
散らばっているデータを一つのデータベースに纏めてみる等、コードを書く以外の工夫をしてみるのも一つの手です。
4,コードを整える
VBAの構文を見直すのも有用です。
VBAは実行する命令文の数が多ければ多いほど時間がかかります。
If文やFor文の順番や条件を見直したり、ループを抜ける条件を設定することで無駄を省ける場合があります。
改めてプログラムを読み直して動作を順番にたどり、全体の構造をチェックしてみましょう。