
お世話になります。
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
No.1ベストアンサー
- 回答日時:
sea_clearさんが書いたコードの中には、特筆すべき無駄は無いように思われます。
考えらる(私の知識の範囲で)原因ですが、・・・
①元シートが、そもそも巨大である。
②元シートのセルへ値を代入することにより、再計算が実行されている。
③元シートのセルへ値を代入することにより、実行されるイベントプロシジャがある。
もし①であれば、Worksheet.Copyメソッドを使っている以上、改善は難しいと思います。
②③なら、下記の設定が有効かもしれません。
Application.ScreenUpdating = False '画面表示の更新を抑止する
Application.Calculation = xlManual '計算方法を手動にする
Application.EnableEvents = False 'イベントの発生を抑止する

No.3
- 回答日時:
5ファイル1分、1ファイル12秒、1シート0.6秒、そんなに遅いとも思えませんが、強いて挙げるなら。
。。シートコピー後はコピー先シートがアクティブになるため、表示シートが次々と変わります。表示に時間が掛かりそうですね。他回答にもありますが、Application.ScreenUpdating = False
を試してください。
貴方のコメントを拝見すると「試してみます」が多いです。社交辞令ならいいですが、本当にそう思ってるなら悪い兆候です。回答を見る限り「○○が原因として考えられるので、もし事実であるなら××を試して」という表現です。まず○○に該当してるか否か確認した上で、試すべきです。○○を無視して闇雲に××を試してませんか?
No.2
- 回答日時:
最後の部分
> Set atmbook = Nothing
> Set atmbook = Workbooks.Add
一度オブジェクトを開放した後、再度新ブックを作成しています。
この後に新ブックに対して何等かの作業が行われるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
-
6
Excelでのセル内容の高速消去方法
その他(プログラミング・Web制作)
-
7
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
8
VBA 複数の行を高速で削除する方法
その他(プログラミング・Web制作)
-
9
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
10
【ExcelVBA】マクロの入ったシートをコピーしても新しいシート内でマクロを動作させるには?
Excel(エクセル)
-
11
EXCEL VBA シートをコピーする時にエラーが発生してしまう件
Excel(エクセル)
-
12
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
13
エクセルVBAで画面の大きさを取得する方法!
Excel(エクセル)
-
14
Filter関数を用いた結果、何も検索されなかった場合
Visual Basic(VBA)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
エクセル ボタンに設定したマクロごとボタンをコピー
Excel(エクセル)
-
17
ExcelでVBAを使用した際に、『パス名が無効です』とエラーになります。
Excel(エクセル)
-
18
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
19
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
20
VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
【ExcelVBA】全シートのセルの...
-
IFステートの中にWithステート...
-
コンボボックスとオートフィル...
-
シート削除のマクロで「delete...
-
excelのマクロで該当処理できな...
-
実行時エラー1004「Select メソ...
-
【Excel VBA】Worksheets().Act...
-
実行時エラー'1004': WorkSheet...
-
Excelマクロのエラーを解決した...
-
エクセルVBA Ifでシート名が合...
-
ユーザーフォームに入力したデ...
-
エクセルのマクロでアクティブ...
-
ブック名、シート名を他のモジ...
-
userFormに貼り付けたLabelを変...
-
【ExcelVBA】動的にボタン、ボ...
-
【エクセルVBA】「Protect User...
-
エクセルの絶対参照の一括操作...
-
エクセルVBA 別シートからのコ...
-
XL:BeforeDoubleClickが動かない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
エクセルで通し番号を入れてチ...
-
VBA 検索して一致したセル...
-
XL:BeforeDoubleClickが動かない
-
VBA 指定した回数分、別シート...
-
VBAマクロでシートコピーした新...
-
シートが保護されている状態で...
-
ブック名、シート名を他のモジ...
-
【VBA】全ての複数シートから指...
-
別のシートから値を取得するとき
-
ExcelのVBAのマクロで他のシー...
-
Excel チェックボックスにチェ...
おすすめ情報
回答ありがとうございます。
何も処理はないです。
atmbookを名前をつけて保存して
次の配列を違うブックに移して
名前をつけた保存するを繰り返すだけです。
atmbook.addしなくて
そのまま使い回ししたほうがいいですかね?
試してみます。
回答ありがとうございます。
3つの設定、もう一度試してみます。
シートのコピーは
copyメソッド以外で
あるのでしょうか?
宜しくお願いします。