マイクには、計算結果を示す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に[オプション]ダイアログボックスが表示されます。

。 [計算]タブを表示します。 (図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トレーニングのソースです。

このヒント(10915)は、Microsoft Excel 97、2000、2002、および2003に適用されます。

Excel(Excel 2007以降)のリボンインターフェイスに関するこのヒントのバージョンは、次の場所にあります: