web-dev-qa-db-ja.com

iif(Iserror())関数はまだ#errorを返します

クエリに列を作成する次の関数があります。

MTD:IIf(IsError(FormatNumber([62xx]![F40]))、0、FormatNumber([62xx]![F40]))

これはExcelファイルにリンクされており、人々は同じ列に数字とテキストを入力します(この例ではF40)。私が見ているのが数字なのかテキストなのかを知る必要があります。テキストの場合はゼロが必要です。数値の場合は数値が必要です。テキスト行でFormatNumber([C107_62xx]![F40])を使用すると、エラーが発生することを知っています。エラーが発生した場合、上記のiif式はそれをゼロに変換し、世界は喜ぶと思います。何らかの理由で、iifステートメントを使用しても#errorが発生します。私は何が間違っているのですか?

IsNumeric関数も使用してみましたが、それでも#NUMを取得します。発生するエラー。

6
Nigel

IsErrorは、あなたが思っていることをしません。ヘルプトピックから、it "式がエラー値であるかどうかを示すブール値を返します。"triggersエラーですが、式isエラー値かどうか。

申し訳ありませんが、その説明はおそらく十分に明確ではありませんでしたが、私はもっとうまくやる方法がわかりません。したがって、このIsNumeric()式をここで必要なものとして検討することをお勧めします。

IIf(IsNumeric([62xx]![F40]), FormatNumber([62xx]![F40]), 0)

これは、以下の出力を持つクエリの同じ式です。

SELECT
    [62xx].F40,
    IIf(IsNumeric([62xx]![F40]), FormatNumber([62xx]![F40]), 0) AS MTD
FROM [62xx];
F40    MTD
-----  ----
foo    0
1      1.00
2.345  2.35
bar    0
5
HansUp