• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの特定シートを完全に手動計算にする方法)

エクセルの特定シートを完全に手動計算にする方法

このQ&Aのポイント
  • エクセルのVBAを使って特定のシートを手動計算モードにする方法について教えてください。
  • ブックを開いた時に特定のシートを手動計算にし、ブックを閉じる時に自動計算に戻す方法について教えてください。
  • Workbook_BeforeCloseのコードに何らかの処理を加えることで、特定のシートを自動計算に戻すことができるのでしょうか。具体的な方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんな感じでどうでしょう? Private Sub Workbook_BeforeClose(Cancel As Boolean)   Dim ans As VbMsgBoxResult   If Not ThisWorkbook.Saved Then     ' 保存されていない場合、ダイアログを出力する。     ans = MsgBox("'" & ThisWorkbook.Name & "'の変更を保存しますか?", _        vbExclamation + vbYesNoCancel + vbDefaultButton3)     Select Case ans     Case vbYes ' はいを選択した場合       Cancel = False       ThisWorkbook.Save  ' ここでブックの保存を行う。     Case vbNo  ' いいえを選択した場合       Cancel = False       ThisWorkbook.Saved = True ' 保存したことにする     Case vbCancel  ' キャンセルを選択した場合       Cancel = True   ' 閉じるのをキャンセルする。     End Select   Else     ' 保存されていればそのままブックを閉じる     Cancel = False   End If   ' ブックを閉じる事を選択した場合のみ自動計算モードにする。   If Not Cancel Then Application.Calculation = xlCalculationAutomatic End Sub VBAでエクセルの出す「保存しますか?」の問いに答えた結果を取得することは できませんが、その問いの出力される条件はわかってますので、それに似た ダイアログを自前で出力し、答えた結果に従って分岐させているだけです。 なお、マクロはブラウザでの見やすさ優先のため、行頭には全角のスペースを 使用しています。 以上

komakoma5050
質問者

補足

お返事が大変遅くなり申し訳ありません。 教えて頂いた方法を検証したところ、ほぼ希望通りの結果になりました。 ただ、”擬似ダイアログ”をキャンセル→ブックを上書き保存→”本物ダイアログ”をキャンセル、とするとやはり自動計算に戻ってしまいました。 これはもうエクセルの仕様なのかな思います。 教えて頂いた方法を元に、もう試行錯誤してみます。 大変勉強になりましたどうもありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name = "Sheet1" Then MsgBox "手動計算セット 適時F9を押せ" Application.Calculation = xlCalculationManual Else Application.Calculation = xlCalculationAutomatic End If End Sub 十分テストして無いが、どうだろう。

komakoma5050
質問者

補足

回答ありがとうございます。 教えて頂いたコードでテストしてみましたが、 他のシートに移動した際に再計算されてしまいました。 質問文の通りシート2~4にはシート1の元データが入っています。 元データは随時書き換えられます。 シート1はアクティブ・非アクティブに関わらず常に手動計算モードにしておき、 再計算するのはマクロ実行したときのみ、という形が理想なのですが…。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

シートモジュールで対象シートを選択したときに「手動」にして、他のシートに移動したときに自動計算するのではダメでしょうか? Private Sub Worksheet_Activate() Application.Calculation = xlCalculationManual End Sub Private Sub Worksheet_Deactivate() Application.Calculation = xlCalculationAutomatic End Sub

komakoma5050
質問者

補足

>シートモジュールで対象シートを選択したときに「手動」にして、他のシートに移動したときに自動計算するのではダメでしょうか? 回答ありがとうございます。 対象のシートはマクロ実行でのみ再計算させたいので、 他のシートに移動したときに再計算されては困るのです…。 (ブックを開いた時から閉じる時まで手動計算にしたいです)