|
|
楼主的问题是,既然IFNA函数是包含于IFERROR函数的,IFNA有何用处?
“全科”“专科”是一个揭示两者包含关系的形象比喻,但没有完全解释,既然“全科”可以解决问题,为什么还要这个“专科”?
首先,“包含于”不是“等于”,两者有个范围的差别。
目前EXCEL函数的错误值有7个:#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!,即包含7种错误类型。为什么要对错误分类?
因为软件不光要处理正常情况,也要处理异常情况和错误情况。(异常和错误是不同的,两者发生的概率、频率、紧急程度、严重程度、处理复杂程度都不同。比如说系统的“充电电池没电了”,可以是一个异常情况,而“充电电池坏了”,则一定是错误情况。“充电电池没电了”,只需要充电;“充电电池坏了”,则需要更换电池。一般来说,“充电电池坏了”相较于“充电电池没电了”,发生概率更小,频率更低,但更紧急,更严重,处理需要的人为干预更多更复杂。)
很多时候我们做一个完整的系统,要写不少代码来处理异常和错误,甚至于代码量要远多于正常处理的代码量。相应地,也要花更多的时间,去测试异常和错误。虽然异常和错误是小概率事件,但往往“失之毫厘,谬以千里”。不要有侥幸心理,所谓的墨菲定律“如果坏事情有可能发生,不管这种可能性多么小,它总会发生”。我们时常写程序和函数,只做正常处理,而忽略异常和错误处理,如果只是测试版可以,如果是最终版,发布版,则会有麻烦。“严密性”永远是软件最重要的指标。做完备的异常和错误处理,是一个“合格的程序员”的必备修养。
那么如何进行错误处理?如果你不想“眉毛胡子一把抓”的话,首先就要对错误进行分类,然后分别处理。
回到楼主的问题,如果你关注,公式是否只报#N/A的错,那么用IFNA和IFERROR是一样的。但如果公式还报其他错误,不同的错误处理的方式不同,那么你就要区分错误,去看“专科”门诊。
继续,其实除了IFNA和IFERROR,EXCEL还有ISERROR(), ISERR()和ISNA()(ISERROR=ISERR+ISNA)。甚至于还有NA()。但为什么没有ISERRNUM(), IFERRNUM(), ERRNUM(), ISWRONGREF(), IFWRONGREF(), WRONGREF()等等?“错误全科”下面为什么只有一个“NA专科”?#N/A有什么特殊吗?
#N/A的意思是没有合适的值(no value is available)。常用于,在单元格中输入“N/A”,避免在计算中因为缺少信息包含空单元格而出现错误的情况,更接近于警告(warning)的一种错误。特别体现在图表中,当数据为#N/A时,该数据会被忽略,不会出现在图表中,它与其它错误值,以及0,空单元格是不同的。
至于CONCATENATE()和&,我觉得两者基本是等价的,所谓的区别,
1. CONCATENATE是函数,&是运算符,对于微软的开发人员来说,它们的实现方法是不同的;
2. CONCATENATE的参数不能多于255,而&只要没有超过公式的长度限制,可以多于255;
3. 但对于参数足够多的时候,作为分隔符,逗号,比&要更清晰,公式的可读性要更好,更容易查错纠错,可读性是跟严密性相关的。
|
|