- ベストアンサー
エクセル再計算の反復計算チェックの保存方法とは?
- エクセル97を使用して、条件に応じてSUMIF関数の結果を反映する目的の式を作成しました。しかし、循環参照エラーが発生し、反復計算のチェックがオフになります。
- マクロの知識がないため、反復計算で乗りきろうとしていますが、保存時に反復計算がオフになるため、エラーメッセージが表示されます。
- 保存時に反復計算のチェックを有効にする方法について、ご教示いただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>[ツール]-[オプション]のチェックを保存できる方法はないのでしょうか。 マクロで可能ですが・・・ ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示します。 プロジェクトエクスプローラのThisWorkbookをダブルクリック。出てきたコードウインドウに下記マクロをコピーして貼り付けます。 'このマクロが、このBookを立ち上げた時に自動的に実行されます。 Private Sub Workbook_Open() With Application .Iteration = True '反復計算をONにします .MaxIterations = 50 ' これは設定の例です(最大反復回数) .MaxChange = 0.003 ' これは設定の例です(変化の最大値) End With End Sub 参考に、循環参照しない方法をマクロで考えてみました。Sheet1で行う例です。C3に算式は入力しません。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示します。 プロジェクトエクスプローラのSheet1をダブルクリック。出てきたコードウインドウに下記マクロをコピーして貼り付けます。 質問は例だと思いますので、変更がありそうな箇所は定数として定義するようにしています。 A列が『1』の時、B列を集計するSumIfの例です。 ここから ↓ Const cCell_A = "A1" '比較セル1 Const cCell_B = "B1" '比較セル2 Const oCell = "C3" '出力セル Const jArea = "A2:A10" 'SumIfの評価の対象となるセル範囲 Const sArea = "B2:B10" 'SumIfの合計計算対象となるセル範囲 Private Sub Worksheet_Change(ByVal Target As Range) Dim cArea As Range '評価に関係するセルを結合させたセル範囲 Set cArea = Union(Range(cCell_A), Range(cCell_B), _ Range(jArea), Range(sArea)) If Not Intersect(Target, cArea) Is Nothing Then 'C3セルに出力する条件に関係するセルに変更があったら If Range(cCell_A) = Range(cCell_B) Then 'この例では、A2:A10が『1』の対応するB列を集計している Range(oCell) = Application.SumIf(Range(jArea), "=1", Range(sArea)) End If End If End Sub
お礼
早速の御回答、有難うございます。 すぐに再計算のマクロの方を試してみたところ、エラーメッセージが消えました! 実は、作表したものは私が使うものではなく、エクセルそのものの知識があまり無い方の為の「データ入力さえすれば自動計算しちゃうよソフト」のような感覚で作成した物なので、エラーやメッセージは極力控えたいと思っていました。 私自身がマクロに対する知識が無いため、自力での作成にてこずっていたところでしたので、大変参考になりました。 後者のマクロについても、時間のある時にゆっくりと勉強方々理解をしてみたいと思います。 急いでいたところでしたので大変助かりました。改めてどうもありがとうございました!!