我具有以下在查询中创建列的函数:

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

这链接到一个Excel文件,人们将数字和文本放在同一列中(在此示例中为F40)。我需要知道我正在看的东西是数字还是文本。如果是文本,我想要一个零,如果是数字,我想要一个数字。我知道在文本行上使用FormatNumber([C107_62xx]![F40])时遇到错误。我假设当我遇到错误时,我上面的iif公式会将其转换为零,世界将会欣喜若狂。由于某些原因,即使我的iif语句我仍然遇到#error。我究竟做错了什么?

我也尝试使用IsNumeric函数,但仍然得到#NUM!发生的错误。

最佳答案

IsError不会执行您认为的操作。在帮助主题中,它“返回指示表达式是否为错误值的 bool 值”。不是表达式是否触发错误,而是表达式是否是一个错误值。

抱歉,这种解释可能还不够清楚,但是我不知道如何做得更好。因此,我建议您考虑使用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

09-28 01:28