今回の話題は、DAY()関数です。

DAY()関数は、日付から数値を抜き出す便利な関数ですが、仕様として?分かりづらいところがあります。
まずは、画像を示します。

DAY()関数はシリアル値(連続した数値)を受け取れるので、”0″を受け取れることはご存知の方も多いと思います。
“0”は、1899/12/30を表します
また、分かりづらいのですが、DAY()関数を空白に対して使おうとすると、30を返します。
これは””が”0″として扱われ、1899/12/30の30を抜き出していると思われます。
これを使った例として、DAY()関数を内側に使ったFILTER()関数を使ってみます。

この関数でやりたいことだと思われることは以下になります。
- A6:C20にFILTER()関数を使いたい表が入っている
- A列の日付から30日の部分を抽出する
すると、A列にある””や”0″までが抽出されてしまいます。
これは想定された動作ではありません。
これを受けて、この記事の結論は以下になります。
DAY()関数を空白セルに適用する場合は、その挙動に注意する(想定された動作かどうか?)
例えば、空白を除外する場合はNOT(ISBLANK())などを使用して対策する。
余計なセルの部分が空白だけなら、NOT(ISBLANK())を使って除外するといいでしょう。
NOT(ISBLANK())は、空白でないセルに対してTRUEを返し、FILTER()関数内で使うと空白以外のセルを抽出します。
今回の”0″を含んだ表で日付だけを抽出したい場合は、例えば、以下のような方法あります。

MAP()関数は、LAMBDA()関数とともに使います。
最初にセル範囲を入れ、参照用の変数を第一引数に、参照用の引数を使う関数を第二引数に入れます。
参照用の引数であるxは名前引数と呼ばれ、セル範囲を一つずつ参照するために使われる引数です。
ISDATE()関数は、スピル機能が使えないため、一つずつ判定しています(ISBLANKやISNUMBERはスピるのに、なぜ…)。
今回は以上となります。
ありがとうございました。

コメント