前回、下記質問にて№8でtatsu99様にご教授頂き無事解決しました。
その節は、ご教授いただきましてありがとうございました。
↓
https://oshiete.goo.ne.jp/qa/9705836.html
その後、集計元のシートを増やしたり、行数を増やしたりしたことが原因なのか
それまで遅くとも5分以内には処理が終わっていたのですが
10分以上集計処理に時間がかかってしまっております。
恐れ入りますが、高速化する方法はありますでしょうか?
何度も申し訳ありませんがご教授頂けますと幸いです。
No.1
- 回答日時:
多分、前の回答は以下のマクロかと思います。
いかのように追加①~追加④を追加してください。
追加①④が画面表示の抑止と戻し
追加②③が自働再計算の抑止と戻しです。
これは、どのようなマクロにも適用できます。
これで、期待した結果が得られない場合は、基本的にロジックの見直し等が必要になります。
-----------------------------------------------------
Public Sub 合計シート集計()
Dim gs As Worksheet
Dim rowg As Long
Dim row, rowstart, rowE, rowW, maxrow As Long
Application.ScreenUpdating = False '追加①
Application.Calculation = xlCalculationManual '追加②
Set gs = Worksheets("合計")
maxrow = gs.Cells(Rows.Count, "A").End(xlUp).row '合計sheet A列の最大行取得
'データクリア
For row = 4 To maxrow
gs.Rows(row).ClearContents
gs.Range("A" & row & ":B" & row).UnMerge 'A,Bセルの結合を解除
Next
rowg = 4
rowstart = rowg
If Goukei(gs, 1, rowg) = False Then Exit Sub '東日本集計
rowE = rowg
Call AreaGoukei("東日本合計", gs, rowstart, rowg)
rowstart = rowg
If Goukei(gs, 2, rowg) = False Then Exit Sub '西日本集計
rowW = rowg
Call AreaGoukei("西日本合計", gs, rowstart, rowg)
Call AllGoukei("全体計", gs, rowE, rowW, rowg)
Application.Calculation = xlCalculationAutomatic '追加③
Application.ScreenUpdating = True '追加④
MsgBox ("処理終了")
End Sub
tatsu99様
再度のご教授ありがとうございます。
劇的に早く処理できるようになりました!!無事解決いたしました。
どのようなマクロにも使用できるのですね。
ちなみに、マクロについて知識不足の為ご教授頂きたいのですが
どの部分(どの式のあとに)挿入すれば良い等、ルールはありますか?
No.2ベストアンサー
- 回答日時:
>ちなみに、マクロについて知識不足の為ご教授頂きたいのですが
>どの部分(どの式のあとに)挿入すれば良い等、ルールはありますか?
シートの更新を行う操作等の前後に入れれば良いです。
基本的には、
マクロ開始のプロシージャは、
Public Sub XXX()
・・・・・何らかの処理
end sub
のようになっています。
このプロシージャの先頭と終わりに入れれば、問題ないです。
Public Sub XXX()
Application.ScreenUpdating = False '追加①
Application.Calculation = xlCalculationManual '追加②
・・・・・何らかの処理
Application.Calculation = xlCalculationAutomatic '追加③
Application.ScreenUpdating = True '追加④
end sub
提示した例では、
MsgBox ("処理終了")の前に追加③④を入れていますが、
後でも、問題はありません。
(個人的には、画面に”処理終了”と表示されるときには、シートの更新された状態が見えた方が気分が多少良いかと思うので、前に表示しています)
また、
Public Sub XXX()
if 何がしかの判断で、then
exit sub
end if
Application.ScreenUpdating = False '追加①
Application.Calculation = xlCalculationManual '追加②
・・・・・何らかの処理
Application.Calculation = xlCalculationAutomatic '追加③
Application.ScreenUpdating = True '追加④
end sub
のように、処理に入る前に、終了してしまうケースがあるなら、確実に処理を
行うことが保障された箇所で、追加①②を行った方が良いでしょう。
何がしかの判断は、例として
1.”処理をおこないますか?”のメッセージボックスの応答でCANCELを選択した場合
2.実行前のチェックで、NGになり、そのマクロを終了する場合
などのケースです。
わかりやすく、ご丁寧にご教授いただきありがとうございます。とても勉強になります。
これまでにご教授頂いたマクロの中身を見比べながら入れる場所を確認したいと思います。
いつも本当にありがとうございます。
No.3
- 回答日時:
1点、使用時の注意事項があります。
マクロが正常に動作し最後まで実行できた場合は、特に問題ありません。
問題は、(通常は発生しませんが)データ不正などの為に、マクロを途中で打ち切った場合です。
そうすると、
Application.Calculation = xlCalculationAutomatic '追加③
Application.ScreenUpdating = True '追加④
の部分が実行されません。
私の調査した範囲では
追加④の部分、画面の自動表示については、マクロが終了した時に、自動的に
Application.ScreenUpdating = Trueの状態になるので、これは問題ありません。
問題は、追加③の部分です。
Application.Calculation = xlCalculationAutomatic これが、実行されないと、
自動再計算が手動計算の状態になったままになります。
その場合は、
「数式」のタブをクリックし、計算方法の設定で、自動を選択してください。
試験時に上記のような状態が、頻繁に発生するなら以下のどちらかの対策をすれば良いでしょう。
対策1:予めもとの状態に戻すマクロを作成しておき、それを実行する。
Public Sub 通常状態に戻す()
Application.Calculation = xlCalculationAutomatic '追加③
Application.ScreenUpdating = True '追加④(実質的にはこれはなくても良い)
End Sub
対策2:異常が発生時、元の状態に戻してから、終了する。
if エラー発生時 then
msgbox("異常発生")
end ・・・ここでマクロが強制終了する
end if
上記を
if エラー発生時 then
msgbox("異常発生")
Application.Calculation = xlCalculationAutomatic '追加③
Application.ScreenUpdating = True '追加④(実質的にはこれはなくても良い)
end ・・・ここでマクロが強制終了する
end if
のようにします。
以上は、試験時に上記のような事態が発生したケースです。通常は最後までマクロが実行されるので
特に気にする必要はありませんが、念の為、記憶にとどめておいてください。
万が一の場合もご教授いただき、本当にありがとうございます。そういったことがあるのですね。
万が一の際、ご教授頂いたことが想定できるとスムーズですね。
本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 以前シートを集めて1シートへ繋げる下記コードをご教授いただき作成しました。 今回すでに集めてある「ま 1 2022/08/29 20:38
- Excel(エクセル) 生産日報と月間集計 3 2022/06/21 22:32
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) 【VBA】元のシート内の文字列を別シートと比較し、一致したら元のシートの別のセルへ転記する方法。 3 2023/03/23 17:30
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- その他(IT・Webサービス) 高速処理可能な表計算ソフトについて ExcelやGoogleスプレッドシートのような表計算ソフトで、 2 2023/04/29 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
メッセージボックスのOKボタ...
-
ExcelのVBA。public変数の値が...
-
一つのTeratermのマクロで複数...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで別のセルにあるふり...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
Excel2013 VBA マクロ実行中に...
-
エクセルに張り付けた写真のフ...
-
IF関数を使ってマクロを実行さ...
-
Excel 改ページのVBAうまくい...
-
エクセルのマクロについて教え...
-
ExcelVBA 図形をクリックした...
-
EXCELのVBAでRange("A1:C4")を...
-
Excelのマクロについて教えてく...
-
有効数字N桁のマクロについて
-
MSアクセスのマクロ・モジュー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
EXCELのVBAでRange("A1:C4")を...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
マクロ実行時、ユーザーフォー...
-
Excelのマクロについて教えてく...
-
ソース内の行末に\\
おすすめ情報