OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.109088
  • 閲覧数6914
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 60% (80/133)

 4枚のシートからなるファイルがあります。
【シート1】インターフェース(変動要因の数値を入力する)
【シート2】最終的な計算結果を表示する
【シート3】DBその一
【シート4】DBその二
という構造です。
シート1で入力した数値によってシート3を参照し、シート1の次の選択肢が変更され、シート4がそれによって変動し、最終的にシート2に反映されるという構造です。
シート1
 ↓
シート3
 ↓
シート1
 ↓
シート4
 ↓
シート2 がフローチャートで全てのシートに関数があります。
関数及びデータが膨大なためファイル容量が3Mほどあり、
選択肢を変動させるのにとても時間がかかって困っています。

 そこで、
シート4
 ↓
シート2 の部分だけ、自動で計算されずに、
何らかの指令を下してから、
計算されるような制御が可能でしょうか?
(マクロ等で)

可能であればどのような方法をとればよいでしょうか?
よろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル11

ベストアンサー率 49% (139/279)

Private Sub Worksheet_Change(ByVal Target As Range)
からシート4を削除するのはOKです。

Sub ボタン1_Click()
にシート4を追加する必要はありません。
Application.Calculate
で全部のシートの再計算を行っています。
お礼コメント
oresama

お礼率 60% (80/133)

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

 ありがとうございました!
投稿日時 - 2001-07-27 14:04:49
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル7

ベストアンサー率 39% (9/23)

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

'計算方法 => 手動
Application.Calculation = xlManual
'計算方法 => 自動
Application.Calculation = xlAutomatic

但し、方法を用いると、全体のセルの自動計算がストップします。
補足コメント
oresama

お礼率 60% (80/133)

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

  • 回答No.2
レベル7

ベストアンサー率 39% (9/23)

それでは 先ほどの補足をさせていただきます。 マクロ等で記述した場合、おのおの実行させる関数(ファンクション)を用意しますよね。 その関数の一番初めでよろしいのではないでしょうか? 例)  function テスト処理!! '処理を行っている場合だげ、自動計算を行わない Application.Calculation = xlManual ...続きを読む
それでは 先ほどの補足をさせていただきます。

マクロ等で記述した場合、おのおの実行させる関数(ファンクション)を用意しますよね。 その関数の一番初めでよろしいのではないでしょうか?

例) 
function テスト処理!!

'処理を行っている場合だげ、自動計算を行わない
Application.Calculation = xlManual


    (処理)

'処理が終了するので自動計算を行う
Application.Calculation = xlAutomatic

end function


また、この命令は、セルの自動計算を手動/自動とするものです。 
手動にした場合は、次の自動にする命令がくるまで、ずっと手動になってしまいますのでご注意を・・・・・(また逆も同じ)
お礼コメント
oresama

お礼率 60% (80/133)

 補足をありがとうございました。
参考になりました。ありがとうございます。
投稿日時 - 2001-07-27 14:00:19
  • 回答No.3
レベル11

ベストアンサー率 49% (139/279)

ご質問は、 シート1  ↓ シート3  ↓ シート1  ↓ シート4 この流れの間は、計算はさせたいが、 シート4  ↓ シート2  については、シート2の計算をとめておいて、シート4までが確定したところで、シート2の計算を一気にやらせたいということだと解釈したのですが、間違っていたらごめんなさい。 お話の感じだと、現在は、マクロを使用せず、 ...続きを読む
ご質問は、

シート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

お礼率 60% (80/133)

ご丁寧な回答ありがとうございます。
ご指摘のとおり、ひたすら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も計算するというようなことを、
付け加えればよいのでしょうか。
投稿日時 - 2001-07-25 18:10:31
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ