• ベストアンサー

エクセルでの自動計算と手動計算

 4枚のシートからなるファイルがあります。 【シート1】インターフェース(変動要因の数値を入力する) 【シート2】最終的な計算結果を表示する 【シート3】DBその一 【シート4】DBその二 という構造です。 シート1で入力した数値によってシート3を参照し、シート1の次の選択肢が変更され、シート4がそれによって変動し、最終的にシート2に反映されるという構造です。 シート1  ↓ シート3  ↓ シート1  ↓ シート4  ↓ シート2 がフローチャートで全てのシートに関数があります。 関数及びデータが膨大なためファイル容量が3Mほどあり、 選択肢を変動させるのにとても時間がかかって困っています。  そこで、 シート4  ↓ シート2 の部分だけ、自動で計算されずに、 何らかの指令を下してから、 計算されるような制御が可能でしょうか? (マクロ等で) 可能であればどのような方法をとればよいでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.4

Private Sub Worksheet_Change(ByVal Target As Range) からシート4を削除するのはOKです。 Sub ボタン1_Click() にシート4を追加する必要はありません。 Application.Calculate で全部のシートの再計算を行っています。

oresama
質問者

お礼

 arataさん、109111の際もお世話になりました。 詳しい説明により、 アウトラインが見えて来たおかげで、 思うように仕上げられました。  ありがとうございました!

その他の回答 (3)

  • arata
  • ベストアンサー率49% (139/279)
回答No.3

ご質問は、 シート1  ↓ シート3  ↓ シート1  ↓ シート4 この流れの間は、計算はさせたいが、 シート4  ↓ シート2  については、シート2の計算をとめておいて、シート4までが確定したところで、シート2の計算を一気にやらせたいということだと解釈したのですが、間違っていたらごめんなさい。 お話の感じだと、現在は、マクロを使用せず、VLookupなどのデータベース関数などで処理を行っているのだと思います。 また、最終的にシート2の結果を見るときは、ボタンなどを用意して、シート2を選択させるのではなく、ご自分でシート2をクリックして見ているのではないでしょうか? これを前提条件として、(うまくいくかどうか、詳しい情報がないため、判断できないのですが、)このようにしてみてはいかがでしょうか 1.このブックを開いたら、自動計算しないようにする。 2.シート1の内容が変わったら、シート1、シート3とシート4の計算を実行させる。 3.シート1にボタンを配置し、全ての選択が終わったらこのボタンを押すことにし、このボタンによって、シート2の計算を実行させる。 4.このブックが閉じるときには、自動計算をする状態に戻す。 まず、対象のブックを開いた状態で、ALTキーを押しながらF11キーを押してください。これでVisual Basic Editorが起動します。 左上のプロジェクトエクスプローラーにあるThisworkbookをダブルクリックして、右側のコードウィンドウを開き、下記を記述します。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.Calculation = xlCalculationAutomatic End Sub Private Sub Workbook_Open() Application.Calculation = xlCalculationManual End Sub これは、最初のが、ブックが閉じるときに、計算の機能を自動にするもの。あとのが、ブックが開いたときに自動計算を手動にするものです。 次に、左上のプロジェクトエクスプローラーのシート1をダブルクリックして、右のコードウィンドウにシート1のモジュールを開き、下記を記述します。 Private Sub Worksheet_Change(ByVal Target As Range) Worksheets("シート1").Calculate Worksheets("シート3").Calculate Worksheets("シート1").Calculate Worksheets("シート4").Calculate End Sub 計算の順番が、問題になるかもしれません。 Visual Basic Editorを閉じて、ブックのシート1にボタンを貼り付けます。 メニューの[表示]-[ツールバー]-[フォーム]にあるボタンを押して、シート上にボタンを貼り付けます。 ボタンを貼り付けるとマクロの登録のダイアログが開くので、[新規作成]のボタンをクリックします。 Sub ボタン1_Click() End Sub こういうのができると思います。これを編集します。 Sub ボタン1_Click() Application.Cursor = xlWait Application.ScreenUpdating = False Application.Calculate ThisWorkbook.Worksheets("シート2").Select Application.ScreenUpdating = True Application.Cursor = xlDefault End Sub マウスカーソルを、砂時計にして、計算速度を上げるため、画面表示の更新を止めて、計算を実行、シート2を選択、画面の更新を行い、マウスカーソルを元に戻す。 ということをやっています。 以上で、終わりです。 シート1、シート2、シート3、シート4は実際のシートの名前に修正してください。 前提条件が間違っていたらまるっきり駄目かもしれません。また、計算の順番で間違った答えがでるかもしれませんので、ご注意ください。

oresama
質問者

補足

ご丁寧な回答ありがとうございます。 ご指摘のとおり、ひたすらVLOOKUPで引き当てているようなファイルです。 シート2を見るときは、シート1からハイパーリンクでシート2を繋いでみています。  そして、私の表現が悪かったのですが、 シート4とシート2の計算を止めたかったのです。Private Sub Worksheet_Change(ByVal Target As Range) Worksheets("シート1").Calculate Worksheets("シート3").Calculate Worksheets("シート1").Calculate Worksheets("シート4").Calculate のシート4の部分を削除して、 Sub ボタン1_Click() Application.Cursor = xlWait Application.ScreenUpdating = False Application.Calculate ThisWorkbook.Worksheets("シート2").Select Application.ScreenUpdating = True Application.Cursor = xlDefault End Sub に、シート4も計算するというようなことを、 付け加えればよいのでしょうか。

  • kj_
  • ベストアンサー率39% (9/23)
回答No.2

それでは 先ほどの補足をさせていただきます。 マクロ等で記述した場合、おのおの実行させる関数(ファンクション)を用意しますよね。 その関数の一番初めでよろしいのではないでしょうか? 例)  function テスト処理!! '処理を行っている場合だげ、自動計算を行わない Application.Calculation = xlManual ・ ・     (処理) ・ '処理が終了するので自動計算を行う Application.Calculation = xlAutomatic end function また、この命令は、セルの自動計算を手動/自動とするものです。  手動にした場合は、次の自動にする命令がくるまで、ずっと手動になってしまいますのでご注意を・・・・・(また逆も同じ)

oresama
質問者

お礼

 補足をありがとうございました。 参考になりました。ありがとうございます。

  • kj_
  • ベストアンサー率39% (9/23)
回答No.1

自動計算を止める物ならば、ありますよ '計算方法 => 手動 Application.Calculation = xlManual '計算方法 => 自動 Application.Calculation = xlAutomatic 但し、方法を用いると、全体のセルの自動計算がストップします。

oresama
質問者

補足

早速のご対応ありがとうございます。 このコマンド? は、どこにどのように書き込めばよろしいでしょうか? マクロやVBAの知識が乏しいもので、 ご教示いただけましたら幸いです。

関連するQ&A

  • Excelで手動計算になっていないのに自動計算できない

    手動計算の設定になっていないのに自動計算出来なくて困ってます。 作業は↓のようなことをしています。 シートが左からsheet1、sheet2、sheet3、sheet4と有ります。 1.sheet1からsheet3までのA1セルの合計をsheet4のA1に出します。関数は=SUM(Sheet1:Sheet3!A1)になります。 2.その後、sheet2をsheet4の右側に移動します。  これでsheet4に入れてある関数自体は変わらないものの、中味の数値には変化があります。(sheet1とsheet3だけの合計になるから) 問題はこの後です。 3.移動したsheet2を元の位置に戻します。  通常でしたらこの時点で再計算され、sheet4にはsheet2の数値を含めたsheet1からsheet3までの合計が出るはずです。 がしかし、出ません。 ・手動計算の設定になっているのかと思い、確認しましたが、自動計算の設定になったままでした。 ・試しにF9キーを押してみましたが再計算されません。 ・実際はシートが大量にある為、計算速度が遅いのかと思い、5分程まってみましたが再計算されません。 ・上書き保存をして、PCも再起動して見ましたが、再計算されません。 結局どうしても再計算されないため、式が入っているセルをF2キーで再入力できる状態にしてからEnterキーを押して更新・再計算しています。(式を再入力している状態ですね) どうにか自動で再計算できないものでしょうか? それともこういう場合って再計算できないものなのでしょうか?

  • 【エクセル】シート一括計算について

    AとB2つのファイルがあり、それぞれに同じ形式で数値が入力されています。 もう1つ同じ形式のファイルCを作り、各セル・シートごとにA+Bの数値をCに表示したいです。 ただし、100シート近くあるため、1シートずつ計算式を設定していくと 膨大な時間がかかるので、作業グループで処理したいと思いましたが、 作業グループではシートまでは自動選択できませんでした。 効率よく計算する方法はありませんでしょうか。 バージョンは2010です。 どうぞよろしくお願いいたします。

  • 再計算の自動化・手動化について。

    Windows NTでExcel 2000を使っています。 Excel VBAでユーザー定義関数を作り、いろんな場合分けで計算できるようになったのはいいのですが、自動計算の Application.Volatile を文頭に置いているので操作のたびに再計算をして動作が遅くなってしまいました。この関数を使ったファイルに時間がかかるのは仕方ないことでも使っていないファイルまでたびたび再計算されてしまうのではさすがに困ってしまいます。数値を変更したときなど、自分の都合に合わせて再計算ができるようにならないものでしょうか。 他の方の質問を見たところ、文頭に手動化の文を置いて、最後に自動化の文を置くようアドバイスしてありましたがこれではファイルを閉じない限り再計算されないのではないかと心配になり、質問をしてみました。よろしくお願いします。(この文頭を持ったファイルを複数開いて作業しているのも関係あるのでしょうか?)

  • エクセル計算式について

    エクセル計算式でホームページ上からエクセルに計算をする際データを集計したいと思ってます。 A5に10/1 B5に10/2 C5に数値 が入力をされています。 日付が入り乱れて入っているのですが、 このA5 B5の数値の間の期間のみのC5の数値を 別のシートで集計がとりたいのです。 INDIRECT関数を使えばよいのでしょうか。 どなたかご回答お願いできますでしょうか。 よろしくお願いいたします。

  • エクセル 違うシートに計算式がある場合

    エクセル2000を使っています。 下記の計算をしたいのですが、方法を教えてください。 1.Sheet1 A1とB1に計算したい元の数値が記入されています。 例えば、A1=1 B1=2 2. Sheet2 のA1とB1に数値が入る事としてC1に計算結果が出るものとします。 3. Sheet1のC1にSheet2のC1の内容を表示したい。 4. Sheet1 A2、A3・・・・・、B2、B3・・・・・に入力した後で、C2、C3・・・・・・に Sheet2のC1で計算させた結果を自動的に入力したい。 別の言い方をすれば、Sheet2 のA1・B1が関数の入力するところにあたり Sheet2のC1が関数の出力(というか、計算結果)にあたります。 Sheet1からSheet2を関数のように使いたいのです。 Sheet1 ____ A_____B_______C 1___1_____2______3 2___2_____3______5 3___5_____8______13 4___9_____1______10 5___4_____5______ 9 Sheet2 ____A_____B_____C 1________________ =A1+B1 2_____________________ こんなイメージです。 Sheet2で計算の入力に対応するセルがA1・B1 計算結果が書いてあるのがC1 実際は、大きな表を参照しながら計算するので、色々計算した結果(途中計算は他のセルも使います)がC1に表されます。 以上、よろしくお願いします。

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

    いつもお世話になっております。 たとえば、シート1~5までのファイルがあり、 各シート内に関数が多数入力されております。 その中にはシート内で完結する関数もありますが、 シート1には、 シート3の計算結果を参照した シート5の計算結果を参照するセル(複数)があり、 その結果を合計する式が入っております。 【シート3】で計算  ↓(計算結果を参照) 【シート5】で計算  ↓(計算結果を参照) 【シート1】で計算 このようなファイルにおいて [F9]keyで再計算を実行した場合、 どのような順番で計算されるのでしょうか? 【シート1】のA1から順番にか、 【シート3】の大元の計算からか はたまた・・・ よろしくお願いいたします。

  • エクセルでの自動計算に関して

    こんにちわ。 エクセルを使って添付画像のようなことをしたいです。 ・「入力1」及び「入力2」に任意の値を入力すると、画像の「自動」部分が自動で算出される。 エクセルで関数を用いて色々な計算シートを作成しています。 実際に望んでいるようなことが出来るのでしょうか? 出来るのであれば、ご教授お願いいたします。 出来ないのであれば、添付画像のどこまで自動で出来るかをご教授お願いいたします。 よろしくお願いいたします。

  • エクセル商品価格の自動計算について

    エクセルについて質問です。 以下のような単価表ブックがあります。 そのブックに商品価格を自動計算するシートを作成したいのですが、できません。 どうか皆さまの知恵を教えていただけますでしょうか。 以下内容です。   | 1cm~10cm | 11cm~20cm | 21cm~30cm  ・・サイズ(1) ―――――――――――――――――――――――― A |    1.5    |     2.5     |    3.0 ―――――――――――――――――――――――― B |    2.5     |     3.5     |    5.5 ―――――――――――――――――――――――― C |    8.0     |     9.0     |    9.5 商品価格を自動計算するシートでは以下のことを行います。 まず種類を選択します。(単価表A~Bのいずれか。) 次にサイズ(1)の数値を入力します。(単価表サイズ(1)の部分) 次にサイズ(2)の数値を入力します。サイズ(2)は2パターンあり、入力はパターン1とパターン2のいずれかです。入力する箇所(セル)はそれぞれ別です。単価表はパターン1の為、パターン2の数値を入力した場合、パターン1の数値に直す計算式の入っているセル(3)が商品価格を自動計算するセルシートの一部にあります。 入力例)数値「A」      サイズ(1)「3.5」      サイズ(2)「1000」 求めたい価格の計算式は、 サイズ(2)パターン1の場合、「サイズ(2)X 価格シート(A)の該当単価」です。 サイズ(2)パターン2の場合、「サイズ(3)X 価格シート(A)の該当単価」です。 エクセルのバージョンは2007です。 (この種類の場合、この範囲内の数値の場合はこれを引っ張ってきて・・等、エクセル初級者ながらいろいろと調べてみたり考えてみたりしたのですが・・本当に悩んでいます。) どうか皆さまの知恵を教えていただけますでしょうか。 長文失礼いたしました。 よろしくお願い致します。

  • Excelの自動計算(SUM関数)について

    ExcelのセルにSUM関数をセットしています。 入力をするのですが、関数をセットしている セルの計算がされません。 セルを選択し、ファンクション2キー押下後 Enterを押すと再計算され表示されます。 随時、関数対象セルに入力するとセットしたセルで 自動計算するにはどうしたら良いでしょうか?

  • EXCELの計算式

    EXCELで表(関数入り)を作成し、それを雛形ファイルにしてコピーし、同じファイルをいくつか作りました。それでコピーファイルをあけて入力しても関数は働かず数字を入力してもセルは0(ゼロ)のままです。シートの上部にある数式が表示される空欄にカーソルを持っていってENTERを押すとそのセルの関数が働きます。 数式は入ってるのになぜでしょうか?ファイルのコピー、シートのコピーと関数は働かないのでしょうか? よろしくお願いします。

専門家に質問してみよう