ADVERTISEMENT

【Notion】Notionの日付範囲から月だけを取り出したい時の数式設定

【Notion】Notionの日付範囲から月だけを取り出したい時の数式設定
🛡️ 超解決

Notionでタスクやイベントを管理する際、日付範囲プロパティを使って期間を設定することはよくあります。その中で「特定の月だけを抽出して表示したい」「月ごとにデータを集計したい」といったニーズが出てくることも少なくありません。しかし、日付範囲は開始日と終了日を持つ特殊なデータ型であるため、単純に.month()を適用するとエラーになることがあります。本記事では、日付範囲から月だけを取り出すための数式設定を、実務で役立つ具体例とともに解説します。失敗しやすいポイントや管理者に確認すべき点も含めて、確実に月を抽出できる方法を身につけてください。

【要点】この記事で確認すること

  • 最初に見る場所: 日付範囲プロパティのデータ構造を理解し、prop("日付範囲").start()または.end()で日付オブジェクトを取り出すこと。
  • 切り分けの軸: 開始日と終了日のどちらの月を使うのか、それとも両方考慮するのか。また、日付プロパティが「日付」のみタイプか「日付範囲」タイプかを必ず確認する。
  • 注意点: 会社のワークスペースでNotionの数式を編集する場合、他のメンバーに影響を与える可能性があるため、事前にテスト用データベースで確認することを推奨します。また、データベースのプロパティ名は正確に入力してください。

ADVERTISEMENT

Notionの日付範囲プロパティの基本構造

Notionでは、プロパティタイプに「日付」を選択すると、単一の日付を保存するか、開始日と終了日を持つ「日付範囲」として保存するかを設定できます。日付範囲として設定した場合、内部的には開始日と終了日の2つの日付データがセットで保持されます。数式でこれらを参照するには、.start().end()といった関数を使って個別の日付オブジェクトに変換する必要があります。この構造を理解していないと、後述するエラーに悩まされることになります。

日付範囲のデータ構造

日付範囲プロパティは、単一の日付プロパティとは異なり、開始日と終了日の2つの値を保持します。数式中でprop("日付範囲")と書くと、そのデータ型は「日付範囲」という専用の型になります。この型に対して直接.month().year()などの日付関数を適用しようとすると、「Type mismatch」エラーが発生します。正しくは、まず.start()または.end()で「日付」型に変換してから、.month()などを呼び出します。

月だけを取り出したい場面

例えば、プロジェクトの開始月だけを表示したい、月度レポートのための集計キーとして月番号が必要、カレンダービューで月ごとに色分けしたい、といったケースがあります。これらのニーズに対応するため、日付範囲から特定の月を抽出する数式は非常に便利です。

お探しの解決策が見つからない場合は、こちらの「Notionトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

formulaで月を抽出する基本の数式

基本の数式は非常にシンプルです。以下に、開始日から月を抽出する例を示します。

  1. データベースに「日付範囲」という名前の日付プロパティを作成します。プロパティタイプは「日付」で、「日付範囲を許可」にチェックを入れます。
  2. 数式プロパティを追加し、名前を「開始月」などにします。
  3. 数式エディタに次のように入力します。
    prop("日付範囲").start().month()
  4. 入力後、数式が正しく評価され、開始日の月(1~12の数字)が表示されることを確認します。
  5. 同様に、終了日の月を取得したい場合はprop("日付範囲").end().month()とします。

なお、プロパティ名に日本語を使う場合は、引用符で囲むことを忘れないでください。プロパティ名が「日付範囲」であれば、prop("日付範囲")のように記述します。スペースや記号が含まれている場合も同様です。

注意:日付範囲にstart()を忘れない

初心者がよくやる間違いは、prop("日付範囲").month()と直接書いてしまうことです。これは「日付範囲」型に対して.month()を呼び出そうとするため、エラーになります。必ず.start()または.end()を挟んでください。また、日付範囲が空(未設定)の場合、.start()nullを返すため、数式はエラーではなく空欄になります。必要に応じてempty()チェックを追加すると安全です。

よくある失敗パターンとその対処

実際に業務で使う際に遭遇しやすいエラーや期待と異なる動作をまとめました。それぞれの原因と解決策を確認してください。

エラー「Type mismatch」が出る

原因: 日付範囲に対して.month()を直接実行している、またはプロパティのタイプが「日付」ではなく「テキスト」など別の型になっている。
対処: 数式をprop("日付範囲").start().month()に修正する。プロパティタイプが「日付」であることを確認する。もし「日付範囲」ではなく単一の日付プロパティであれば、.start()は不要です。

月が1桁で表示される(0埋めしたい)

デフォルトの.month()は1~12の数値を返します。01、02のように0埋めしたい場合は、formatDate()関数を使います。例:formatDate(prop("日付範囲").start(), "MM")とすると「01」「02」…と2桁で表示されます。ただし、この戻り値はテキスト型になる点に注意してください。

開始日と終了日の月が異なる場合の扱い

プロジェクトが月をまたぐ場合、開始月と終了月が異なることがあります。どちらの月を抽出したいのか、用途に応じて使い分けてください。例えば「開始月」と「終了月」の2つのプロパティを別々に作る方法や、if文を使って「開始月=終了月ならその月、違う場合は範囲表示」といった高度な数式も可能です。ただし、数式が複雑になりすぎないように注意しましょう。

月の抽出を応用したテクニック

基本を押さえたら、さらに実用的なテクニックを紹介します。これらを組み合わせることで、より柔軟なデータ管理が可能になります。

方法 数式例 結果(例)
開始月を数字で取得 prop("日付範囲").start().month() 3
終了月を2桁テキストで取得 formatDate(prop("日付範囲").end(), "MM") “05”
月名を英語で取得 formatDate(prop("日付範囲").start(), "MMMM") “March”
開始月と終了月が同じならその月、違う場合はテキスト連結 if(prop("日付範囲").start().month() == prop("日付範囲").end().month(), formatDate(prop("日付範囲").start(), "MM"), formatDate(prop("日付範囲").start(), "MM") + "-" + formatDate(prop("日付範囲").end(), "MM")) “03-04”

これらのテクニックを使うことで、レポート作成やフィルタリングが格段に楽になります。

月名を文字列で取得(例:January)

formatDate()関数の書式指定子を使うと、月をフルスペルや省略形で取得できます。"MMMM"は「January」「February」、"MMM"は「Jan」「Feb」となります。ロケールはNotionの言語設定に依存するため、日本語環境では「1月」「2月」と表示されることもあります。チームで統一したい場合は、数式内でreplace()を使って変換することも可能ですが、あまり複雑にしない方が良いでしょう。

月を数字で取得して条件分岐

例えば「第1四半期」「第2四半期」などを表示したい場合、.month()で取得した数値をceil()floor()で割り算して判定できます。ceil(prop("日付範囲").start().month() / 3)とすれば、1~3月→1、4~6月→2…という四半期番号が得られます。この数値をテキストに変換し、「Q1」のように整形すれば、グルーピングに便利です。

管理者が知っておくべきNotionの式の制限

会社のワークスペースでNotionを管理する立場の方は、数式のパフォーマンスや編集制限について把握しておくとトラブルを防げます。

日付範囲プロパティの注意

日付範囲プロパティは、開始日と終了日の両方が必須ではありません。終了日のみ設定して開始日を空にすることも可能ですが、その場合は.start()nullになるため、数式でエラーが発生する可能性があります。数式を書く際は、empty()でチェックするか、.end()のみ使うなどの対策を検討してください。また、日付範囲のプロパティ名は後から変更すると数式が壊れるため、命名は慎重に行ってください。

他のプロパティとの連携

抽出した月を他のプロパティ(特にロールアップや集計)で使用する場合、データ型に注意してください。.month()で得られる値は数値型、formatDate()で得られる値はテキスト型です。ロールアップで数値の合計を計算したいときは、数値型のままにする必要があります。また、フィルターで「月が4月のデータだけ表示」といった場合も、数値型とテキスト型でフィルタの挙動が異なるため、統一した型で運用しましょう。

よくある質問(FAQ)

  • Q: 日付範囲ではなく単一の日付プロパティでも同じ数式が使えますか?
    A: 単一の日付プロパティの場合は、.start().end()は不要です。直接prop("日付").month()と書いてください。ただし、プロパティタイプが「日付」で「日付範囲を許可」がオフになっている必要があります。
  • Q: 月だけではなく年月を抽出したい場合はどうすれば?
    A: .year().month()を組み合わせるか、formatDate()"YYYY年MM月"などの書式を指定します。例:formatDate(prop("日付範囲").start(), "YYYY/MM")
  • Q: 日付範囲が空の場合にエラーを避ける方法は?
    A: if(empty(prop("日付範囲").start()), "", prop("日付範囲").start().month())のように、empty()で先にチェックして空文字を返すようにします。
  • Q: 数式が正しいのにエラーが消えません。何が原因ですか?
    A: プロパティ名にタイプミスがないか、スペースや全角文字が含まれていないか確認してください。また、プロパティ名の引用符をシングルクォートではなくダブルクォートで統一しているかもチェックポイントです。それでも解決しない場合は、一度プロパティを削除して再作成してみると改善することがあります。

まとめ

Notionの日付範囲から月だけを取り出すには、prop("日付範囲").start().month()または.end().month()が基本の数式です。日付範囲は単一の日付とは異なるデータ型であるため、.start().end()を忘れずに使いましょう。月の数値だけでなく、formatDate()を活用して文字列として整形することも可能です。エラーが発生した場合は、プロパティの型や名前、数式の記述ミスを順に確認することで、ほとんどの問題が解決します。ぜひ実際のデータベースで試しながら、自分たちの業務に最適な数式を作り上げてください。

ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

🧩
Notionトラブル完全解決データベース 共有、権限、データベース、Notion AI、インポートで止まる問題を横断的に確認できます。

ADVERTISEMENT