Excelで帳票を作っているのですが、20拠点分を一括でやってます。
現状
①ExcelでDBへ接続
②データをそれぞれのシートに貼り付け
③BVAで拠点のコードに書き換え
④式を消すためにコピー&ペースト
③~④を必要な数だけ自動で繰り返します。
実行速度にまだ満足できず、質問に至りました。
①~②はすぐ終わるのですが、コピー&ペーストで時間がかかってるように思います。
シートの式を値に変える方法で、オススメな方法があったら教えてください。
※PCのスペックアップ以外でお願いします。
速くするコツです。
Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1").Select
というソースの場合は いちいち セルを選択(Select)してたら遅くなります。
ま、ここらへんは 表示をやめればいいのかもしれませんが
プログラミングとしては おすすめしません。
これを 以下のようにすればいいのです。
Range("A1:F10").Copy Range("A1:F10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=True
範囲は "A1:F10"と適当に指定していますが、一つずつのセルを 処理するのではなく
シート全体の範囲を指定して 一回で やったほうが 速いかと思います。
お役に立てるかなと思い回答致します。
1の方の指摘は最もかと思いますので、プラスアルファで。
具体的なコードは書けないのですが、2つほど。
まず1つは、
「③~④を必要な数だけ自動で繰り返します。」
この処理は、
「必要な数」とは、例えば20拠点が全てだとして、
例えば10拠点とか3拠点とか、必要な分をどこかで判断しているかと思います。
ループ分でいえば、回数を変数指定したり、またはセルに直接入力している(20とか)かもしれません。
もし判断されていないのであれば、20拠点全部回っているので、その部分は処理を少なくできそうです。
あともう1つは、
「④式を消すためにコピー&ペースト」
式を消す部分が固定なら値も固定できそうです。
当然、変数よりも固定値のほうが処理は早くなるかと思います。
あと、消す処理もいくつかありそうです。どれが早いかを計測してみるのも面白そうです。
参考までに、
処理を早くするには、
1)処理を減らす
2)効率的な処理にする(関数やロジック)
3)一度使った変数をなるべく使う(無駄にクリアしない)
などかなと考えられます。
回答になってないかもしれませんが、以上です。
回答ありがとうございます。
独学でやってる上に一人でちまちま進めてるんでコツといったものに行きつくまでに時間がかかっております。
今回の質問で、3分も短くなりました。
›あと、消す処理もいくつかありそうです。どれが早いかを計測してみるのも面白そうです。
これについて、何らかの具体案があればぜひお願いします。
今のところ
シートを複製して、全エリアコピー&ペーストでやってます。
シート全体と必要分(1発で指定できる範囲)で試してみたいと思います。