
こんにちは。
必要に迫られ、初めてマクロを組んでいます。
下記三つのコードの実行に時間がかかり、
その後の処理に支障が出てきているようです。
遅い時は、1分30秒程度かかる時もあります。
なんとか、高速化できないものかとなやんでいます。
内容
excel 2007
file size 約400kのブック
タイマーによりそれぞれ
(1)23時54分
(2)23時56分
(3)23時58分
に起動するようになっています。
(1)
Sub DB保存()
Dim bn As String
Dim 値 As String
Dim 本日 As String
Dim 新ブック As String
Dim 年 As String
Dim 月 As String
Dim 日 As String
Dim 時間 As String
bn = "温湿度管理表.xlsm"
年 = Year(Now)
月 = Month(Now)
日 = Day(Now)
時間 = 235400 '変更注意
本日 = Format(expression:=Date, Format:="yyyymmdd")
値 = (本日) & (時間)
新ブック = "C:\システム\管理者用\DB\DB" & (値) & ".xlsm" 'パス変更注意
Workbooks(bn).SaveCopyAs Filename:=新ブック
End Sub
(2)
Sub DBから日別保存へコピー()
On Error Resume Next
Dim bn As String
Dim sheetn As String
Dim セル As String
Dim 値 As String
Dim 本日 As String
Dim 元ファイル As String
Dim 新ファイル As String
Dim 年 As String
Dim 月 As String
Dim 日 As String
Dim 時間 As String
bn = "温湿度管理表"
sheetn = "管理2"
セル = "H13"
年 = Year(Now)
月 = Month(Now)
日 = Day(Now)
時間 = 235400 '変更注意
本日 = Format(expression:=Date, Format:="yyyymmdd")
値 = (本日) & (時間)
元ファイル = "C:\システム\管理者用\DB\DB" & (値) & ".xlsm" 'パス変更注意
'パス変更注意
新ファイル = "C:\システム\温湿度 管理\日別保存データ\" & Format$(Date, "yyyy年") & "\" & Format$(Date, "mm月") & "\" & Format$(Date, "mm月dd日") & ".xlsm" 'パス変更注意
Dim MyFile As String
Dim fso, f, ts
MyFile = "C:\システム\管理者用\DB\DB" & (値) & ".xlsm" 'パス変更注意
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(MyFile) = True Then
End If
On Error Resume Next
FileCopy 元ファイル
End Sub
(3)
Sub 表のクリア()
' 表のクリア Macro
ThisWorkbook.Worksheets("管理").Range("F11:P160").ClearContents
End Sub
特に(2)と(3)が遅くて、
場合により、(3)以降タスクマネージャーのCPU使用率が延々100%になったままになります。
なにぶんドのつく素人でして、困っています。
どうかお知恵を拝借願います。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>また、それぞれ標準モジュールに一つづつ記入しています。
>その都度、変数を入れることは必要ないですか?
>また、まとめて一つの標準モジュールにしたほうが、処理ははやいのですかね?
変数の宣言、代入はモジュールごとに必要です。
モジュールを一つにまとめてもバラバラにしても今回の場合は処理時間は変わらないでしょうね。
(2)で時間が掛かるとすれば、記載されているコードがすべてなら、FileCopy文くらいしか考えられませんが、いづれにしろ1ステップづつ実行しながら確認するしかありません。
(3)はセルのクリアだけですから、モジュールの自動実行ではなく、手動でモジュールを実行させたときの処理時間や、セルを直接手動でクリアした場合の処理時間を調べてみてはどうでしょうか。
もし、手動で実行したときは処理時間が掛からないけれど、自動実行にすると処理時間が掛かるという場合は、自動実行のときに何か別の処理も実行されている可能性があります。
タスクマネージャーのCPU使用率が100%のようですが、どのプロセスがCPUを使っているか、またメモリーの使用状況も確認したほうがいいと思います。
No.1
- 回答日時:
やっていることは、(1)はBookの保存、(2)はファイルのコピー、(3)はセルのクリアのようですから、本来は時間がかかるはずがない処理です。
原因を究明するためには、デバッグモードで1ステップづつ実行し、どのステップで時間がかかっているか調べたほうがいいのではないですか。
それとは別に、コードを見て気になった点を。
(1),(2)の年,月,日は値を代入するだけでその後使用していないので不要では?
(2)の元ファイルとMyFileに同じファイル名を代入しているが、別名で使い分ける必要はある?
(2)の On Error Resume Next が2ヶ所で宣言していますが1つで充分です。
(2)で On Error Resume Next を宣言する意味が不明です。エラーとなりうるのは FileCopy のときですが直前にファイルが存在することを確認しているので On Error Resume Next は必要ありません。
逆に On Error Resume Next を宣言するならファイルの存在の確認をしなくても大丈夫です。
(2)の If fso.FileExists(MyFile) = True Then の後の End if は場所が違うのでは?(FileCopy文の後では)
(2)の FileCopy 元ファイル は構文ミスですね(コピー先ファイルが必要)
(2)に Dim fso, f, ts とありますが、f と ts は使っていません。何か理由があって宣言しているのですか?
nag0720様
こんばんは。
ありがとうございます。
コードはコピーペーストしてまして、
重複がかなりあるのが事実です。
また、それぞれ標準モジュールに一つづつ記入しています。
その都度、変数を入れることは必要ないですか?
また、まとめて一つの標準モジュールにしたほうが、処理ははやいのですかね?
コードは、ツギハギでして。。。
わけわからず、見よう見まねで書いて、とりあえず動いた状態です。
無駄や重複を削除しなければいけませんね。
FileCopy 元ファイル 新ファイルです。
抜けていました。
いじると動かなくなりそうで、見直しや改良をしていませんでした。
期日(明後日!!)が迫っているので、出来る限りをしようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pivot table で集計されたデー...
-
CFileDialogで保存したい
-
AccessVBAでIEを操作、ページ内...
-
Corel Digital Studioの動画をS...
-
VBAでIEの「ファイルのダウンロ...
-
VBAでPDF作成をしたあと、指定...
-
リスト構造
-
意味不明のタグが挿入されてい...
-
PHPでのcsv出力について
-
フォルダーの中味(項目)をプ...
-
画像ファイルを右クリックする...
-
FDやUSBメモリのファイルをPCに...
-
VISTAのHDの内容を調べる方法
-
Windowsを立ち上げるとこれが出...
-
共有しているファイルを削除し...
-
XPの暗号化ファイルを解除・検...
-
au ソニーの携帯 W41Sについて
-
ファイルの保存をOnedriveのク...
-
Ubuntu でinvalid filenameとな...
-
論文に載せるグラフを作成したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでファイルの最終更新...
-
Excel VBAでほかのアプリケーシ...
-
Excel VBAで作成したマクロをxl...
-
VBAで、強制保存してブックを閉...
-
読み取り専用ファイルを上書き...
-
AccessVBAでレポートをPDFで出力
-
Pivot table で集計されたデー...
-
EclipseでJavaScriptファイルの...
-
エクセルで「名前を付けて保存...
-
VBAでPDF作成をしたあと、指定...
-
VBScriptで日本語が変です
-
【Excel VBA】自動的にバックア...
-
VBScriptでのSaveAsについて
-
webページの特定の部分だけ消し...
-
タイトルバーやメニューバーの...
-
ASPでファイルを保存するダイア...
-
vbaでIEの名前を付けて保存(A)...
-
ExcelVBAでデスクトップのPATH...
-
エクセル:マクロ:保存時に連...
-
Corel Digital Studioの動画をS...
おすすめ情報