マイクには、計算結果を示す3つのセル(A1:A3)があります。彼は、これらのセルのいずれかにこれまでに現れた最大値を決定し、その値をセルE5に格納する方法を必要としています。彼は3つから最大値を取得する方法を知っていますが、ワークシートを再計算するときに、A1:A3の値がE5の最大値よりも小さい場合(A1:A3の最大値の以前の決定に基づく)、E5変更しないでください。言い換えると、E5は、A1:A3にあるものがE5にあるものよりも大きい場合にのみ変更する必要があります。マイクはそのような計算を実行する方法がわかりません。

この問題を解決するには2つの方法があります。 1つ目は、セルE5に配置される単純な式を作成することです。

=MAX(A1:A3,E5)

MAX関数は、参照するさまざまな値を調べて、それらから最大値を返します。まさに必要な値です。ただし、この数式はセルE5に配置されており、E5も参照しているため、エラーが返されます。これは、数式が循環参照を作成するためです。 Excelはそれらを処理できますが、それを行うには小さな構成変更を行う必要があります:

。 [Excelのオプション]ダイアログボックスを表示します。 (Excel 2007では、[Office]ボタンをクリックし、[Excelオプション]をクリックします。Excel2010以降のバージョンでは、リボンの[ファイル]タブが表示され、[オプション]をクリックします。)

。ダイアログボックスの左側にある[数式]をクリックします。 (図1を参照)

。 [反復計算を有効にする]チェックボックスがオンになっていることを確認します。

。 [OK]をクリックします。

これで、Excelは、セルE5に入力した単純な数式などの循環参照を処理します。

2番目のアプローチは、マクロを使用して計算を実行することです。 (何らかの理由で)ブックで循環参照を有効にしたくない場合があるため、このアプローチが推奨される場合があります。以下は実際にはイベントハンドラーであり、ワークシートのコードに追加されています。 (最も簡単な方法:

シートタブを右クリックし、表示されるコンテキストメニューからコードウィンドウを表示して、そのコードウィンドウにマクロを追加します。)

Private Sub Worksheet_Calculate()

Dim dMax As Double     dMax = Application.WorksheetFunction.Max(Range("A1:A3"))

If dMax > Range("E5") Then         Application.EnableEvents = False         Range("E5") = dMax         Application.EnableEvents = True     End If End Sub

ワークシートが再計算されるたびに、マクロがトリガーされます。それはA1:A3の最大値をつかみ、それをE5にあるものと比較します。それが大きい場合にのみ、その値はE5に配置されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(10916)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。