プロが教えるわが家の防犯対策術!

お世話になります。

VBAで元になるワークシートにデータを代入して、新しく加えた別のブックに
データを入れたもとになるワークシートをコピーするVBAで

ワークシートを15回コピーして一つのBOOKを作るのを
5回ぐらい繰り返させるのですが、処理が終わるまでに
1分かかります。

シートをコピーさせるところで時間がかかってます。

早くする方法教えてください。


高速化についても、このサイトを参考に
してあります。

http://officetanaka.net/excel/vba/speed/

コードの一部ですが、宜しくお願いします

dim atmbook as Workbook
atmworksheet コピー元 ワークシートです。

For mi = 0 To 20


If mname(mi, 0) = "" Then

Exit For

Else

atmworksheet.Range("D2").Value = mname(mi, 0)

atmworksheet.Range("O2").Value = Format(hiduke, "yyyy年m月d日(aaa)")

atmworksheet.Range("D4").Value = mname(mi, 3) & " " & mname(mi, 5) & vb                  NewLine & mname(mi, 1) & vbNewLine & mname(mi, 2)

atmworksheet.Copy after:=atmbook.Worksheets(atmbook.Worksheets.Count)

End If

atmworksheet.Range("D2").Value = ""

atmworksheet.Range("O2").Value = ""

atmworksheet.Range("D4").Value = ""
Next mi

For mi = 0 To 20

For mj = 0 To 6

mname(mi, mj) = ""

Next mj
Next mi

mi = 0 'mi 初期化


atmbookname = atmbookname & Format(hiduke, "yyyy年m月d日")


Application.DisplayAlerts = False


atmbook.SaveAs Filename:=atmbookname, FileFormat:=xlOpenXMLWorkbookM                     acroEnabled

atmbook.Close

Application.DisplayAlerts = True

Set atmbook = Nothing

Set atmbook = Workbooks.Add

質問者からの補足コメント

  • 回答ありがとうございます。

    何も処理はないです。

    atmbookを名前をつけて保存して
    次の配列を違うブックに移して
    名前をつけた保存するを繰り返すだけです。


    atmbook.addしなくて
    そのまま使い回ししたほうがいいですかね?

    試してみます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/02/14 14:53
  • 回答ありがとうございます。

    3つの設定、もう一度試してみます。


    シートのコピーは
    copyメソッド以外で
    あるのでしょうか?

    宜しくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/02/14 14:56

A 回答 (3件)

sea_clearさんが書いたコードの中には、特筆すべき無駄は無いように思われます。


考えらる(私の知識の範囲で)原因ですが、・・・
①元シートが、そもそも巨大である。
②元シートのセルへ値を代入することにより、再計算が実行されている。
③元シートのセルへ値を代入することにより、実行されるイベントプロシジャがある。

もし①であれば、Worksheet.Copyメソッドを使っている以上、改善は難しいと思います。
②③なら、下記の設定が有効かもしれません。

Application.ScreenUpdating = False '画面表示の更新を抑止する
Application.Calculation = xlManual '計算方法を手動にする
Application.EnableEvents = False 'イベントの発生を抑止する
この回答への補足あり
    • good
    • 0

5ファイル1分、1ファイル12秒、1シート0.6秒、そんなに遅いとも思えませんが、強いて挙げるなら。

。。シートコピー後はコピー先シートがアクティブになるため、表示シートが次々と変わります。表示に時間が掛かりそうですね。他回答にもありますが、
Application.ScreenUpdating = False
を試してください。

貴方のコメントを拝見すると「試してみます」が多いです。社交辞令ならいいですが、本当にそう思ってるなら悪い兆候です。回答を見る限り「○○が原因として考えられるので、もし事実であるなら××を試して」という表現です。まず○○に該当してるか否か確認した上で、試すべきです。○○を無視して闇雲に××を試してませんか?
    • good
    • 1

最後の部分



> Set atmbook = Nothing
> Set atmbook = Workbooks.Add

一度オブジェクトを開放した後、再度新ブックを作成しています。
この後に新ブックに対して何等かの作業が行われるのでしょうか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A