4枚のシートからなるファイルがあります。
【シート1】インターフェース(変動要因の数値を入力する)
【シート2】最終的な計算結果を表示する
【シート3】DBその一
【シート4】DBその二
という構造です。
シート1で入力した数値によってシート3を参照し、シート1の次の選択肢が変更され、シート4がそれによって変動し、最終的にシート2に反映されるという構造です。
シート1
↓
シート3
↓
シート1
↓
シート4
↓
シート2 がフローチャートで全てのシートに関数があります。
関数及びデータが膨大なためファイル容量が3Mほどあり、
選択肢を変動させるのにとても時間がかかって困っています。
そこで、
シート4
↓
シート2 の部分だけ、自動で計算されずに、
何らかの指令を下してから、
計算されるような制御が可能でしょうか?
(マクロ等で)
可能であればどのような方法をとればよいでしょうか?
よろしくお願いします。
No.2
- 回答日時:
それでは 先ほどの補足をさせていただきます。
マクロ等で記述した場合、おのおの実行させる関数(ファンクション)を用意しますよね。 その関数の一番初めでよろしいのではないでしょうか?
例)
function テスト処理!!
'処理を行っている場合だげ、自動計算を行わない
Application.Calculation = xlManual
・
・
(処理)
・
'処理が終了するので自動計算を行う
Application.Calculation = xlAutomatic
end function
また、この命令は、セルの自動計算を手動/自動とするものです。
手動にした場合は、次の自動にする命令がくるまで、ずっと手動になってしまいますのでご注意を・・・・・(また逆も同じ)
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は実際のシートの名前に修正してください。
前提条件が間違っていたらまるっきり駄目かもしれません。また、計算の順番で間違った答えがでるかもしれませんので、ご注意ください。
この回答への補足
ご丁寧な回答ありがとうございます。
ご指摘のとおり、ひたすら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も計算するというようなことを、
付け加えればよいのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) エクセルの数式について ブック内の別シートの値の含まれたセルの個数を集計したい 全シート一覧のシート 1 2022/07/21 19:28
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Excel(エクセル) Application.Volatile利用(excel2003) 1 2023/02/06 10:11
- Excel(エクセル) エクセルの日報作成について 3 2023/07/05 12:49
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
特定のシートのみ再計算させな...
-
エクセルで複数のシートに画像...
-
エクセルの2つのシートを並び...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
エクセル、特定のシートにパス...
-
特定の複数のシートに同じ処理...
-
エクセルで、シートの名前を変...
-
ハイパーリンクでジャンプした...
-
【ExcelVBA】マクロの入ったシ...
-
Wordで差し込み印刷時に表示す...
-
エクセルのシー名を二段表示に...
-
エクセルのシート連番の振り直し
-
EXCELの「シートの見出し」のフ...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
ActiveSheet.Protect UserInter...
-
エクセルでリンク貼り付けした...
-
エクセルで誤ってF11キーを押す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
【ExcelVBA】マクロの入ったシ...
-
ワークシートそのものの色を変...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセル、特定のシートにパス...
-
エクセルのシー名を二段表示に...
-
Accessのテーブルを既存のExcel...
-
確定申告用の医療費集計フォー...
-
エクセルのシート連番の振り直し
-
【Excel】エクセルの1ファイル...
-
エクセルの複数シートでのリン...
-
【Excel VBA】データ貼り付け先...
-
エクセルでリンク貼り付けした...
おすすめ情報