Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1159 / 13645 ツリー ←次へ | 前へ→

【75958】新規ブックの保存に時間がかかる まめ 14/8/11(月) 15:38 質問[未読]
【75959】Re:新規ブックの保存に時間がかかる まめ 14/8/11(月) 16:49 発言[未読]
【75960】Re:新規ブックの保存に時間がかかる γ 14/8/11(月) 18:31 発言[未読]
【75961】Re:新規ブックの保存に時間がかかる まめ 14/8/11(月) 18:52 発言[未読]
【75962】Re:新規ブックの保存に時間がかかる γ 14/8/11(月) 19:20 発言[未読]
【75963】Re:新規ブックの保存に時間がかかる まめ 14/8/12(火) 8:47 発言[未読]

【75958】新規ブックの保存に時間がかかる
質問  まめ  - 14/8/11(月) 15:38 -

引用なし
パスワード
   いつも大変お世話になっております。

新規ブックの作成→編集→保存というマクロを作っているのですが
どうも保存の段階でとても時間がかかっているようです。

ステップ実行であれば一瞬で保存できるのに、
通しでマクロ実行すると保存に3秒近くかかってしまいます。

ちょっとしたタイムロスではありますが、マクロ使用回数が多いため
気になってしまいます。

ブックの保存に時間がかかるのは仕方ないことなのでしょうか。
アドバイス等よろしくお願いいたします。

--------------------------------------------------
特別なことは行っていないのですが、該当部分のコードを
参考までに記載させていただきます。

Workbooks.Add
myBook = ActiveWorkbook.Name
Savepath = Filepath & "処理\" & Format(Date, "yyyymmdd")
Workbooks(myBook).Close SaveChanges:=True, Filename:=Savepath

【75959】Re:新規ブックの保存に時間がかかる
発言  まめ  - 14/8/11(月) 16:49 -

引用なし
パスワード
   マクロの全要としましては、以下の通りです。
1.複数のCSVに対して 処理を行い、その計算結果を配列に格納しておく
 ※配列の大きさ・数ともに小さいです。
2.新規エクセルファイルを開き、先ほどの配列をペースト、書式などを整える
3.名前を付けて保存
 ※保存ファイルは10KB程度の小さいものです。

今ちゃんと時間を測ってみたところ
1.の部分にかかる時間は1.5秒
2.の部分にかかる時間は1.5秒
3.の部分にかかる時間は6.6秒 程度でした。

しかし2.・3.の部分のコードのみ新規ブックにコピーペーストして実行すると
1秒かからずに処理が終了します。

ループなどを使うようにはしていますが、全体的に長いコード
であるのが原因なのでしょうか。

【75960】Re:新規ブックの保存に時間がかかる
発言  γ  - 14/8/11(月) 18:31 -

引用なし
パスワード
   > 特別なことは行っていないのですが、該当部分のコードを
> 参考までに記載させていただきます。
>
> Workbooks.Add
> myBook = ActiveWorkbook.Name
> Savepath = Filepath & "処理\" & Format(Date, "yyyymmdd")
> Workbooks(myBook).Close SaveChanges:=True, Filename:=Savepath
新しくブックを作成して、それをそのまま閉じるだけなので、
保存もされませんし、何が問題となっているのか理解できません。
もう一度内容を確認してください。

なお、提示するなら、きちんと変数の宣言もつけて提示しましょう。

また、保存なら保存で、正々堂々と保存系のメソッドを使ったほうが
いいように思います。

【75961】Re:新規ブックの保存に時間がかかる
発言  まめ  - 14/8/11(月) 18:52 -

引用なし
パスワード
   ▼γ さん:
ご回答いただき誠にありがとうございます。

ご指摘最もです、省略しすぎてしまい大変申し訳ありません。
下記にコードを記載させていただきます。


Dim myBook as String
Dim データ(1 to 10) as String
Dim n as long
Dim bookname as string
Dim myValue as variant
Dim Filepath as string
Dim Savepath as string
Dim Savename as string

'ブックを作成
Workbooks.Add
myBook = ActiveWorkbook.Name

’データ(i)に格納された文字列をペースト
For i = 1 To 10
  Workbooks(myBook).Sheets(1).Cells(1, i) = データ(i)
Next i

’体裁を整える
Cells.ColumnWidth = 10
With Selection
  .HorizontalAlignment = xlCenter
End With
ActiveWindow.Zoom = 50
With Range("A1:K1").Interior
  .ColorIndex = 15
End With
ActiveWindow.DisplayGridlines = False

’項目名、配列をペースト
For n = 1 To 10
  Workbooks(myBook).Sheets(1).Cells(n + 1, 1) = bookname(n)
  Workbooks(myBook).Sheets(1).Range(Cells(n + 1, 2), Cells(n + 1, 13)) = myValue(n)
Next n

Filepath = ThisWorkbook.Path & "\"

Savepath = Filepath & "処理\" & Format(Date, "yyyymmdd")
Workbooks(myBook).Close SaveChanges:=True, Filename:=Savepath

以上になります。
長すぎて一部省略していますので、まだ不備があるかもしれませんが
何卒ご容赦いただければ幸いです。

以上、よろしくお願いいたします。

【75962】Re:新規ブックの保存に時間がかかる
発言  γ  - 14/8/11(月) 19:20 -

引用なし
パスワード
   >何卒ご容赦いただければ幸いです。
いえいえ、ご自分に返ってくる話ですので、
私には影響がありません。

私が試したところでは、さほど時間はかかりません。1秒以内です。

コードの所々に、Timer関数を使って、経過時間をイミディエイト・ウインドウに
書き出し、どこで時間が掛かっているか、さらに詳しくみてみてはいかがですか?
まずは、ファイル保存までと、保存に要する時間をわけて見ては?

【75963】Re:新規ブックの保存に時間がかかる
発言  まめ  - 14/8/12(火) 8:47 -

引用なし
パスワード
   ▼γ さん:
お世話になっております。

昨日色々試してみたところ、γさんの仰るように
提示したコード部分だけでは1秒以内に終了することがわかりました。

また、マクロの全体的な内容としては
1.複数のCSVに対して 処理を行い、その計算結果を配列に格納しておく
2.新規エクセルファイルを開き、先ほどの配列をペースト、書式などを整える
3.名前を付けて保存

なのですが、1.の部分のみでは1.5秒くらいであることもわかっています。
2.3.に1秒かからないわけですから、合わせれば2秒程度で終わるはずなのですが
組み合わせるとなぜか保存に9秒以上かかるようなのです。

Timer関数を使って計測した時間が、レスNo2の内容になります。
以上、よろしくお願い致します。

1159 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free