メインコンテンツへスキップ

12 · 空値を詳しく見る

XTL における「空値」とは

ADR-0007 基準:

  • 空値: missing/null/undefined、または Unicode 空白だけで構成された文字列。
  • 空値ではない: 数値 0、Boolean false、空白以外のすべての文字列、すべての Date。

文字列 "0""false" は空値ではありません。こうした値を取り除きたいなら明示的に比較してください: [金額] != "0"

IFEMPTY ― 欠落値への代替値

{{ IFEMPTY([担当者], "未割当") }}
{{ IFEMPTY([メモ], "—") }}
{{ IFEMPTY([地域], __config__[default_region]) }}

IFEMPTY(value, fallback)value が空値のときだけ fallback を返します。0false には発動しません。

空値と 0 の違い ― よくあるバグ

{{ IFEMPTY([金額], "未入力") }} → 金額が 0 の行は "0"(数値)のまま
{{ IF([金額] = 0, "未入力", [金額]) }} → 金額が 0 の行は "未入力"

「欠落」と「0」の両方を 未入力 と表示したいなら:

{{ IF(IFEMPTY([金額], 0) = 0, "未入力", [金額]) }}

空のグループキー → (blank)

ADR-0026 によれば、グループキー値が空の行は次の結果を生みます。

  • output_file_pattern で使われると (blank).xlsx という名前のファイル。
  • シートテンプレート名で使われると (blank) という名前のシート。

Excel のピボットテーブルの慣例と同じです。むしろ騒がしくエラーを出したいならソース段階で事前に取り除いてください。

{{ @filter [地域] != "" }} ← 地域が空の行は除去

集計関数での空値

SUMCOUNTAVERAGEMINMAX は空値をスキップします。

data: [10, 20, "", 30]
SUM: 60 (エラーではない)
COUNT: 3 (4 ではない)
AVERAGE: 20 (15 ではない)

空でない項目が 0 個のとき AVERAGE は空値を返します(エラーではない)。これを明示的に捕捉したければ IFEMPTY で包みます。

{{ IFEMPTY(AVERAGE([金額]), "データなし") }}

IF 条件での空値

Truthiness(ADR-0008 基準):

  • 空値 → falsy。
  • 数値 0 → falsy。
  • Boolean false → falsy。
  • 文字列 "0""false"truthy(空でない文字列)。
  • すべての Date → truthy。
{{ IF([地域], [地域], "不明") }} → 地域が "" なら ""、それ以外は地域
{{ IF([金額], [金額], "データなし") }} → 金額が 0 か空なら "データなし"

単一式セルでの空値

ADR-0026 基準: {{ expr }} だけが入ったセルが空値として評価されると空セルになります(エラーではない)。セル自体は OOXML に存在し、値だけが空です。xl3 でもう一度読むと ADR-0007 に従って空値として読まれます。

リテラルが混在するセル、例えば {{ [金額] }} 円 の結果は " 円" です(空数値が空文字列にシリアライズされ、その後に空白が付く形)。

スペック参照

  • spec/evaluation.md の「Empty Values」。
  • ADR-0007(空値定義)、ADR-0008(truthiness)、ADR-0026(ライフサイクル)。
  • IF/IFEMPTY の基本は Cookbook 02 を参照。