12 · 空値を詳しく見る
XTL における「空値」とは
ADR-0007 基準:
- 空値: missing/null/undefined、または Unicode 空白だけで構成された文字列。
- 空値ではない: 数値
0、Booleanfalse、空白以外のすべての文字列、すべての Date。
文字列 "0" と "false" は空値ではありません。こうした値を取り除きたいなら明示的に比較してください: [金額] != "0"。
IFEMPTY ― 欠落値への代替値
{{ IFEMPTY([担当者], "未割当") }}
{{ IFEMPTY([メモ], "—") }}
{{ IFEMPTY([地域], __config__[default_region]) }}
IFEMPTY(value, fallback) は value が空値のときだけ fallback を返します。0 や false には発動し ません。
空値と 0 の違い ― よくあるバグ
{{ IFEMPTY([金額], "未入力") }} → 金額が 0 の行は "0"(数値)のまま
{{ IF([金額] = 0, "未入力", [金額]) }} → 金額が 0 の行は "未入力"
「欠落」と「0」の両方を 未入力 と表示したいなら:
{{ IF(IFEMPTY([金額], 0) = 0, "未入力", [金額]) }}
空のグループキー → (blank)
ADR-0026 によれば、グループキー値が空の行は次の結果を生みます。
output_file_patternで使われると(blank).xlsxという名前のファイル。- シートテンプレート名で使われると
(blank)という名前のシート。
Excel のピボットテーブルの慣例と同じです。むしろ騒がしくエラーを出したいならソース段階で事前に取り除いてください。
{{ @filter [地域] != "" }} ← 地域が空の行は除去
集計関数での空値
SUM、COUNT、AVERAGE、MIN、MAX は空値をスキップします。
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 を参照。