Grahamは、B1とC1の2つのセルを参照する数式を使用します。 = IF(A1 = 1、IF(B1> C1、B1、C1))のように、数式が行うのはセルの1つの値を返すことだけです。通常、B1とC1の両方に日付が含まれていますが、どちらかまたは両方が空の場合もあります。両方が空の場合、戻り値(空であるため0)は1/0/1900として表示されます。両方のセルが空の場合、Grahamは、数式が0ではなく空白の値を返すことを望んでいます。

このニーズに取り組むにはいくつかの方法があります。ただし、最初に、Grahamの式の例から始めましょう:

=IF(A1=1, IF(B1>C1, B1, C1))

A1に値1が含まれていない場合に返される内容が提供されないため、数式は少し「不完全」です。記述されているように、A1に2(または1以外の値)が含まれている場合、数式は「FALSE」を返します。 “。したがって、式を少し変更して、A1が1でない場合に、次のように「空白」の値を返すようにします。

=IF(A1=1, IF(B1>C1, B1, C1), "")

次に、「B1> C1」で何が起こっているのかを理解することが重要です

比較。もちろん、日付はシリアル番号として数値として内部に保存されます。 B1にC1よりも新しい日付が含まれている場合、B1のシリアル番号はC1のシリアル番号よりも大きくなります。

これに加えて、B1とC1のデータの特性によって、比較(>)がどのように機能するかが決まります。

。両方のセルに数値(日付を含む)が含まれている場合、比較は期待どおりに機能します。

。セルのいずれかにテキスト値が含まれている場合、どちらか一方に数値が含まれていても、両方のセルにテキスト値が含まれているものとして扱われます。

。セルの1つが空の場合、そのセルは値0を含むものとして扱われます。

これに基づいて、一方のセルに日付が含まれ、もう一方のセルが空の場合、シリアル番号(日付)を0(空のセル)と比較することと同じであるため、シリアル番号は常に空のセルよりも大きくなります。両方のセルが空の場合、両方とも0を含むものとして扱われるため、両方が等しくなります。

したがって、Grahamの式で、セルA1に値1が含まれ、セルB1が空で、セルC1が空であるとします。これは、数式がExcelによって「変換」される方法です。

=IF(A1=1, IF(B1>C1, B1, C1), "")

=IF(1=1, IF(B1>C1, B1, C1), "")

=IF(B1>C1, B1, C1)

=IF(0>0, B1, C1)

=C1 =0

これが、Grahamが数式によって0が返されるのを確認している理由です。0が日付のシリアル番号と見なされると、1/0/00(または1/0/1900)として表示されます。

これを回避するには、B1とC1の両方が空かどうかを確認する必要があります。

これを行う方法はいくつもあります。彼の公式のこのバリエーションを考えてみましょう:

=IF(A1=1, IF((B1+C1=0), "", IF(B1>C1, B1, C1)), "")

このバリエーションでは、IFステートメントを追加してC1に追加されたB1が0に等しいかどうかを確認します。これは、Excelが空白と0をこのコンテキストで同等と見なすため、両方が空白の場合になります。欠点は、B1またはC1のいずれかにテキスト値が含まれている場合、数式によって#VALUEエラーが返されることです。

より良いバリエーションは次のとおりです:

=IF(A1=1, IF(AND(B1=0,C1=0), "", IF(B1>C1, B1, C1)), "")

このインカネーションでは、IFステートメントはAND関数を使用して、B1とC1の両方が0であるかどうかを判別します。これにより、潜在的な#VALUEエラーの問題も解決されます。

B1とC1の両方が空であるかどうかを本当に確認したい場合は、別のアプローチに依存する必要があります。 1つの方法は、COUNTA関数を使用することです。

=IF(A1=1, IF(COUNTA(B1:C1)=0, "", IF(B1>C1, B1, C1)), "")

B1とC1の両方に同時にテキスト値が含まれることは決してないという事実を知っている場合は、前述の式のCOUNTA関数の代わりにCOUNT関数を使用することもできます。

もう1つのアプローチは、COUNTBLANK関数をほぼ同じ方法で使用することです。空の範囲内のセル数のカウントを返します:

=IF(A1=1, IF(COUNTBLANK(B1:C1)=2, "", IF(B1>C1, B1, C1)), "")

同様のバリエーションは、ISBLANK関数(セルが空白の場合はTRUEを返す)をAND関数と一緒に使用することです。

=IF(A1=1, IF(AND(ISBLANK(B1), ISBLANK(C1)), "", IF(B1>C1, B1, C1)), "")

ここで行うように、ExcelでB1とC1をテキストが含まれているかのように評価することもできます。

=IF(A1=1, IF(B1&C1="", "", IF(B1>C1, B1, C1)), "")

B1またはC1のいずれかに単一のスペースが含まれている場合、この式は期待どおりに機能しないため、TRIM関数をミックスに追加することをお勧めします。

=IF(A1=1, IF(TRIM(B1&C1)="", "", IF(B1>C1, B1, C1)), "")

これまでに説明した式のいずれかで、MAX関数を使用してB1またはC1を返すIFステートメントを次のように変更することもできます。

=IF(A1=1, IF(TRIM(B1&C1)="", "", MAX(B1:C1)), "")

ただし、これを行う場合は注意点が1つあります。MAX関数はすべてのテキスト値を0と同等と見なします。したがって、セルB1に「abc」が含まれセルC1に1が含まれる場合は、大なり記号演算子(> )は「abc」を1より大きいと見なしますが、MAXは1を「abc」より大きいと見なします。

戻ってGrahamの元の数式(2つの空白セルをチェックしない数式)を使用して、数式を含むセルの書式設定に依存する方法もあります。次のようなカスタムフォーマットを作成するだけです:

m/d/yyyy;;

フォーマットの最後にある2つのセミコロンに注意してください。これらは、セルの値が負またはゼロの値の場合、何も表示しないようにExcelに指示します。この形式を使用すると、1900年1月0日の日付が表示されることはありません。セルは空白として表示されます。

もちろん、他の_ExcelTips_で説明されているように、ワークシート内のすべてのゼロ値を非表示にするようにExcelを変更することもできますが、他の数式からゼロの結果を表示する必要がある場合は、そうすることは目的に合わない場合があります。

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

このヒント(10386)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。