プロが教える店舗&オフィスのセキュリティ対策術

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

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

可能であればどのような方法をとればよいでしょうか?
よろしくお願いします。

A 回答 (4件)

自動計算を止める物ならば、ありますよ



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

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

この回答への補足

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

補足日時:2001/07/25 10:53
    • good
    • 0

それでは 先ほどの補足をさせていただきます。



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

例) 
function テスト処理!!

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


    (処理)

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

end function


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

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

お礼日時:2001/07/27 14:00

ご質問は、



シート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は実際のシートの名前に修正してください。

前提条件が間違っていたらまるっきり駄目かもしれません。また、計算の順番で間違った答えがでるかもしれませんので、ご注意ください。

この回答への補足

ご丁寧な回答ありがとうございます。
ご指摘のとおり、ひたすら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
    • good
    • 0

Private Sub Worksheet_Change(ByVal Target As Range)


からシート4を削除するのはOKです。

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

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

 ありがとうございました!

お礼日時:2001/07/27 14:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!