いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)NETWORKDAYS関数をスピルさせる方法

 ExcelでNETWORKDAYS関数の第1、第2引数(開始日、終了日)を複数セルに拡張しても普通はエラーになりますが、ちょっと手を加えるとスピルさせることができます。
 NETWORKDAYS.INTL関数についても同様です。

手順

 まずは失敗例です。
 次の画像ではNETWORKDAYS関数の応用例として、B3:B7の各セルの各日付が平日(土・日曜以外)かどうかを判定しようとしています。
 スピルが効けばC3:C7の各セルに0(土日の場合)または1(月~金の場合)が表示されるはずですが、これはエラーとなってしまいます。

 C3セル(エラー)

=NETWORKDAYS(B3:B7,B3:B7)

「=NETWORKDAYS(B3,B3)」から「=NETWORKDAYS(B7,B7)」までの5つの結果を各セルに表示させることを意図した式ですが、なぜかエラーとなります。



 そこで次のように2つの引数の後ろに「*1」をつけると狙い通りの結果を得ることができます。

 C3セル

=NETWORKDAYS(B3:B7*1,B3:B7*1)

 「*1」の代わりに「+0」を付けてもいいですし「+B3:B7」のようにしても同じ結果となります。
 平日の判定については普通にスピルが効くWORKDAY関数を使う方法もあるものの式の意味が分かりにくく、NETWORKDAYSを使う方が理解しやすく扱いやすいかと思います。本ブログでもいくつかの記事でNETWORKDAYS関数はスピル出来ないものと紹介していましたが、随時訂正していきたいと思います。


 また、スピルのないバージョンでもこのように記すことで(もちろん複数セルへの表示はされませんが)結果の配列を利用することが可能となります。具体的には「=SUMPRODUCT(金額の配列,NETWORKDAYS(日付の配列*1,日付の配列*1))」のような式により、平日のみの集計を行うといったことが可能となります。