ロブは、彼が毎日完了する各仕事の統計を保持しています。たとえば、彼は各ジョブの開始時間(列B)と終了時間(列C)を05/16/11 11:25 amの形式で入力することにより、各ジョブに費やされた正確な時間と分を追跡します。別の列(列G)には、その月の各日の日付があります。各日付の右側(列H)に、http://calendarcorner.net/ [calendar]の各日付で完了したジョブの数を表示したいと考えています。ロブは、この数を計算するためにどの式を使用するのか疑問に思います。

この作業は、最初に思われるほど簡単ではありません。その理由は、開始時刻と終了時刻の保存方法によるものです。

列Bには、「05/16/11 11:25 am」の形式で、同じ列に開始日時の両方が含まれ、列Cには、同じ形式で終了日時の両方が含まれます。次のように、列GのCOUNTIF関数を使用できると思うかもしれません。

=COUNTIF(C$2:C$1000,G2)

ただし、これは機能しません。理由は単純です。列G(この場合はセルG2)には、時刻のない日付が含まれています。たとえば、2011年5月16日の日付が含まれている場合があります。これを、05/16/11 11:25 amを含む可能性のあるセルC2と比較すると、同じではありません。 Excelは、各セルに格納されている日付と時刻のシリアル番号に基づいて比較を行っていることに注意してください。上記の値の例を考えると、セルG2には39217のシリアル番号が含まれ、セルC2には39217.47569のシリアル番号が含まれます。これらの2つの値は同じではないため、COUNTIFはそれらを等しいとは見なしません。

明らかに、1つの解決策は、時間なしで各ジョブの終了日のみを含む別の列を追加することです。次に、いわば「リンゴとリンゴ」を比較するので、数式でCOUNTIF関数を使用できます。ただし、新しい列で中間結果を使用する必要がないソリューションがあります。これには、列Cにあるものの整数値が列Gに格納されている日付と比較されていることを確認する必要があります。これは、次のようにSUMPRODUCT関数を使用して実行できます。

=SUMPRODUCT((INT(C$2:C$1000)=G2)*1)

C2:C1000の範囲の各値の整数が、G2の日付と比較され、True値とFalse値の配列が得られます。これらのそれぞれに1を掛けると、True値とFalse値がそれぞれ1と0の値になります。次に、数式はこれらの積を合計して、必要な数を求めます。

必要に応じて、SUMPRODUCTを使用して基本的に同じタスクを実行する次の式を使用することもできます。

=SUMPRODUCT(--(INT(C$2:C$1000)=G2))

SUMPRODUCT関数を使用して結果を判別する利点の1つは、配列数式を使用する必要がないことです。ただし、配列数式を使用することを好む人もいます。それらを使用したい場合は、次のいずれかを使用できます:

=COUNT(IF(INT(C$2:C$1000)=INT(G2),1,FALSE))

=SUM(IF(ROUND(C$2:C$1000,0)=G2,1,0))

Ctrl + Shift + Enterを使用して、配列数式をセルに入力する必要があることに注意してください。

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

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

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