エクセルファイルのオープン時の再計算について

このQ&Aのポイント
  • エクセルファイルをオープンすると自動的に再計算が行われます。VBAを使って、再計算を止めると、ブックを開いた時全てで再計算が停止してしまいます。
  • 質問は、あるブックから他のブックを開いた時に再計算を行わず、手動で他のブックを開いた時に再計算を行う方法を知りたいというものです。
  • 一つの方法として、親となるブックから他のブックを開いた時に、他のブックのWorkbook_Open()イベントが始まる前にWorkbook_Open()を書き込むことが考えられますが、これは難しいかもしれません。詳しい方のアドバイスを求めています。
回答を見る
  • ベストアンサー

エクセルファイルをオープンしたときの再計算について

エクセルファイルをオープンすると自動的に再計算がされます。VBAを使って、Workbook_Open()で、再計算を止めると、当然、ブックを開いた時全てで再計算が停止してしまいます。 で、質問ですが、あるブックから他のブックを開いた時には、再計算を行なわない(あるブックにVBAを組み込んで・・(イベントは、ボタンにからめてもok!)にして、手動で他のブックを開いた時は、再計算を行なうようなことが出来るのでしょうか? VBA初心者の僕として、精一杯考えたのは、親となるブックから、他のブックを開いた時に、他のブックのWorkbook_Open()イベントが始る前にWorkbook_Open()を書き込めればできると思うのですが?そんなこと無理なのでは?って思います。どなたか?詳しい方いませんでしょうか?宜しくお願い致します。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 > 他のブックのWorkbook_Open()イベントが始る前にWorkbook_Open() > を書き込めればできると思うのですが? VBA コードを VBA から書き込むのは可能なのですが、禁じ手ですし、 今後不可能になるかもしれません。 Workbook_Open ではなく、Activate イベントすれば、このコードが 書かれたブックだけで動作しますが、どうですか? Private Sub Workbook_Activate()   Application.Calculation = xlManual End Sub Private Sub Workbook_Deactivate()   Application.Calculation = xlCalculationAutomatic End Sub

vba_minarai
質問者

補足

ご指導ありがとう御座います。 教えていただいたルーチェンをキーとなるエクセルブックのThisworkbookに書き込むのが?正しいのでしょうか?各々のブックに書き込むと普通に立ち上げたときも再計さんしないように思えるのですか・・? あと、VBAのコードを書き込む方法は教えていただけないでしょうか?各シートに印刷用のボタンを配置したファイルを一杯作りましたが、VBAのコードを変更したい場合、手動で一つ一つコピー&ペーストしています。やはり、禁じ手なので無理でしょうか? 宜しくお願い致します。

その他の回答 (1)

  • n-akina
  • ベストアンサー率31% (75/238)
回答No.1

こんにちは。  [ツール]->[オプション]->[計算方法]タブに、自動か手動かを設定するところはありますが、Excel自体の設定と思われます。 では。

関連するQ&A

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

    こんにちは。 エクセルのVBAについて最近勉強を始めた初心者です。 下記について知恵をお借りしたく、質問させて頂きます。 4つのシートで構成されているブックがあります。(他ブックとの連動はありません) シート1は集計表で、シート2~4はシート1の元データーが入っています。 本体はシート1のみ手動計算にしたいのですが、現状は以下の方法を取っています。 (1)ブックを開くと、ブック全体を手動計算にする (2)必要なタイミングで、シート1の特定セル範囲(3パターンあり)を再計算させるマクロを実行 (3)ブックを閉じると、自動計算に戻す こちらの方法でほぼ問題無いように思えたのですが、 ブックを閉じる時にエクセルの仕様で『'ファイル名.xls'への変更を保存しますか?』と聞かれますよね。 そこで"キャンセル"を選択すると、ブックは開いたまま自動計算モードに戻る=シート1が再計算されてしまうのです。 (このタイミングで(3)(Workbook_BeforeClose)のコードが走っているのだと思います) 先述の通り、本来手動計算にしたいのはシート1に限定されており、 シート2~4は自動計算で構いません。 やりたい事をまとめると、 ■ブックを開く  :シート1=手動計算、シート2~4=自動計算 ■ブックを閉じる:シート1=自動計算に戻す、ただしキャンセルした場合は手動計算モードを保持 現在のWorkbook_BeforeClose~の部分に何らかのコードを加えたら実現可能? とも思いますが、そこが分からず行き詰っています…。 上記実現するために良い方法がありましたら、ご教示お願いいたします。 【This Wook Book】に記述しているコード----------------------- Private Sub Workbook_Open() 'ブックを開くと手動計算にする Application.Calculation = xlCalculationManual End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) 'ブックを閉じると自動計算に戻す Application.Calculation = xlCalculationAutomatic End Sub -----------------------------------------------------

  • Auto_OpenとWorkbook_Openの違いは?

    Auto_OpenとWorkbook_Openの違いは何でしょうか? マクロから開かれた場合、Workbook_Openしか実行されないことは認識していますが、それ以外に異なる点は無いのでしょうか? Workbook_OpenやWorkbook_BeforeCloseはブックが最初に開かれたり閉じられたりすると認識していますが、最近このマクロを記述しているブックをウィンドウのバックに置いて、他のブックからこのブックにしようとするとやたら時間がかかるような気がしました。 Workbook_OpenやWorkbook_BeforeCloseを削ったら早くなったような気がしましたが、これは単なる気のせいでしょうか? よろしくお願い申し上げます。

  • エクセルの起動を知るには

    サブタイトル  <ブックが開いたことを捕捉するには>、<2つめが開いたことを知るには> こんにちわ。 エクセルブックを開いた時に自動で実行するマクロに Workbook_Open や auto_open と言うのがありますが、 今、マクロのある自分のエクセル(A)を開いた状態で、 新たに2つ目のブック(B)を開いたと言うイベントを捕捉したいのです。 (『あなたは2つ目のこのブックを開きましたね』と言うメッセージを出したい) ブック(A)にどのようなマクロを施せば、 ブック(B)のオープンを知ることができるでしょうか。 教えて下さい。よろしくお願いします。

  • Workbook_Openを起動時以外に呼び出す

    標準モジュールに書いた、Sub Auto_Open()なら、ボタンにAuto_Openを登録するなどで、ブックの起動時以外でも呼び出せますが、ThisWorkbookに書いた、Private Sub Workbook_Open()は、ボタンにWorkbook_Openを登録しても作動しません。 どのようにすればよいのでしょうか?

  • ウィンドウのアクティブイベント

    Excel VBAで、ウィンドウがアクティブになった時に呼び出されるイベントプロシジャーを教えて下さい。 Workbook_SheetActivate、Workbook_WindowActivate、Workbook_Activateは検証しました。 Workbook_Activateイベントはブックがオープンされた時のみ呼び出され、それ以外の イベントプロシジャーについては、アクティブになっても全く反応しませんでした。 他のアプリケーションウィンドウとの行き来の際、アクティブになる度に処理を入れたいと 思っています。 よろしくお願い致します。

  • エクセルで「ブックの計算」が「自動」になりません

    エクセル2007を使っています。 「エクセルのオプション」→「数式」→「計算方法の設定(ブックの計算)」のところで、 何度も「自動」を選択するのですが、一旦、OKを押して、もう一度、「エクセルのオプション」を開けると、「手動」に戻っています。 どうすればよろしいでしょうか。

  • Book1.xlsとBook2.xlsのエクセルファイルが有ります。

    Book1.xlsとBook2.xlsのエクセルファイルが有ります。 VBAを作成しているのはBook2.xlsで操作しています。 Book1 Sheet1 A B C 1 6 4 2 2 8 5 3 3 5 1 4 . Book1のシートのB列とC列には整数が入力されています。 A列には計算式が入ります。 例)A1の計算式 =B1+C1 A2の計算式 =B2+C2 A列の結果をBook2 Sheet1 のA列に反映しようとした場合に、 以下のVBAだと、計算式のコピーになってしまうので、計算結果の値を反映する事が出来ません。 A列の計算結果(上記の例だと、6,8,5)をまとめて反映させる方法はありますか? Sub tashizan() Dim thisBook As Workbook Dim workBook1 As Workbook Set thisBook = ThisWorkbook Set workBook1 = Workbooks.Open("C:\Documents and Settings\Book2.xls") thisBook.Worksheets("Sheet1").Range("A1:A100").Copy workBook1.Worksheets("Sheet1").Range("A1") workBook1.Close End Sub 初心者ですので、宜しくお願いします。

  • Excel 自動計算について

    Excel2003を使用しています。 VBAを使用して、ブック全体を自動計算せず、アクティブシート内のみ自動計算させる方法はありますでしょうか? よろしくお願いします。

  • excelマクロでのファイルオープン時の動作確認

    仕事で使うexcelに大容量のデータベースを持ったファイルがあり、関数でそこから値を取得しているのですが、他のexcelを開いているときに誤って開いてしまうと計算が走ってしまい時間をロスしてしまいます。 誤って開いた場合でも、計算前にダイアログでyes/noの確認が出ればと思い、マクロで以下の通り ダイアログを作ってみたのですが、Workbook_Openでも関数の計算後に処理は実行されてしまうのでしょうか。 もしくは、他に関数の計算前に以下のような挙動を行わせる方法はないでしょうか。 (開く前に手動計算にすれば確かに回避は可能ですが、他のミスのリスク(手動計算に気付かず作業してしまう)もあり、できれば避けたいと思っています) ----------------- Private Sub Workbook_Open() Dim mac1 As Integer If Range("B2").Value = 1 Then mac1 = MsgBox("関数の計算を行いますか?", vbYesNo + vbQuestion, "確認") If mac1 = vbYes Then MsgBox "読み込みます" Else MsgBox "中断します" ThisWorkbook.Close SaveChanges:=False End If Else End If End Sub -----------------

  • エクセルの再計算について

    お世話になっております。 現在、EXCEL2000を使用しております。 ツール>オプション>計算方法 を「手動」にし、VBAで 任意に再計算を行っています。 このとき、計算方法が「自動」の時の再計算中と同じよ うに、再計算の進捗状況をタスクバーに表示させたいの ですが、どうしたらよいかご存知の方いらっしゃいまし たら教えてください。 宜しくお願いします。

専門家に質問してみよう