数式のエラーは例外ではなく値です。セルにはエラー表示が入り、それを参照した数式へ伝播します。

一覧
| 表示 | 列挙値 | 主な原因 |
|---|---|---|
#DIV/0! | Div0 | ゼロ除算 |
#VALUE! | Value | 引数の型が合わない |
#REF! | Ref | 参照先が削除された |
#NAME? | Name | 未知の関数名・未定義の名前 |
#N/A | NA | 検索で該当なし、引数不足 |
#NUM! | Num | 計算結果が数値として表現できない |
#NULL! | Null | 交差しない範囲どうしの交差 |
#CIRCULAR! | Circular | 循環参照 |
#CIRCULAR! は Excel には無い表示です。Excel は警告ダイアログで知らせますが、
V5 はヘッドレスで動く必要があるため値として返します。
列挙型は unvell.ReoGrid.Core.Formula.FormulaError です。
エラーの伝播
引数のいずれかがエラーの場合、原則としてそのエラーがそのまま返ります。
A1 = 1/0 → #DIV/0!
A2 = A1 + 10 → #DIV/0! (伝播する)
A3 = SUM(A1:A2) → #DIV/0!
例外は、エラーを受け取ることが役割の関数です — IFERROR / IFNA /
ISERROR / ISERR / ISNA。
エラーを処理する
ws.SetFormula(0, 0, "1/0"); // #DIV/0!
ws.SetFormula(1, 0, "IFERROR(A1, 0)"); // エラーを既定値に置き換える
ws.SetFormula(2, 0, "IFNA(VLOOKUP(\"x\", A1:B9, 2, FALSE), \"該当なし\")");
string shown = ws.GetDisplayText(0, 0); // "#DIV/0!"
| 関数 | 捕まえる対象 |
|---|---|
IFERROR(値, 代替) | すべてのエラー |
IFNA(値, 代替) | #N/A のみ |
VLOOKUP の「該当なし」だけを扱いたい場合は IFNA を使ってください。IFERROR は
引数の型間違いなど本来直すべきエラーまで隠してしまいます。
プログラムから判定する
エラーセルの CellValue は Kind が Error になります。
ws.GetValue(r, c).Kind == CellValueKind.Error
表示文字列が必要なら GetDisplayText(r, c) が "#DIV/0!" のような文字列を返します。
GetObjectValue(r, c) はエラーを表す文字列を返します。数値として扱おうとすると
失敗するため、集計処理では Kind を確認してください。
ISERROR と ISERR の違い
| 関数 | #N/A を真とするか |
|---|---|
ISERROR | する(すべてのエラー) |
ISERR | しない(#N/A 以外) |
Excel と同じです。