admin 管理员组文章数量: 887021
2023年12月18日发(作者:银行个人简历模板下载)
在平常运用函数的过程中常常会碰到以下内容,就是敲入函数却返回诸如:#N/A,
#VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, or #NULL!
这样一些错误值,如何办呢?今天咱们就开始讨论这个话题。
一般来讲这样的一些函数都会与IF函数挂钩在一起,如=IF(ISERR())等等,下面还是通过例子来讲解比较容易理解。
A3 = FIND("b","He's metrosexual") -- 在第二个参数中没有字符"b", 所以Find函数找不到, 结果就不是一个数字, 而是 "#VALUE!" (错误值)
A4 = IF(a*1>0,">0","<=0") -- "a"是字符, a*1导致出错, 所以结果是#NAME?
A5 = NA() -- 函数NA()是生成一个NA值 (#N/A)
FIND和IF的例子
#VALUE! =C2=FIND("b","He's metrosexual")
#NAME? =IF(A*1>0,">0","<=0")
#N/A =NA()
看到上面这么多的错误值,怎么区分呢?其实大家不用那么用心去记住这样的一些值。常用的也无非是::#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, or
#NULL!
只要记住:
判断是否是 #N/A 我们就用 “ISNA"
是否是其他错误(#VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, or #NULL! )我们就用 “ISERR”
如果这样都懒得记, 就记住全部错误都可以用 “ISERROR”来判断
以下来详细的讲解这三个函数的用法:
他们的用法都是一样的. 非常简单, 只有1个参数, 这个参数可以是单元格的引用或者一段公式, 当然也可以是一个值. 结果是TRUE或者FALSE.
ISNA () : 如果参数的结果为#N/A, 则结果TRUE, 否则结果是FALSE
ISERR() : 如果参数的结果是(#VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, or
#NULL! ), 则结果是TRUE, 否则结果是FALSE
ISERROR() : 如果参数的结果是(#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!,
#NAME?, or #NULL! ), 则结果是TRUE, 否则结果是FALSE
所以“ISERR”和“ISERROR”的区别就是:“ ISERROR”比“ISERR”函数多判断一个"#N/A"值 (也就是说: = ISERR(NA()) 的结果是FALSE; 而 =
ISERROR(NA())的结果是TRUE. 而ISNA就只能判断参数是不是#N/A.
下面我们来看看几个例子
例子1: 如下表, A9-A12为4个员工的名字, 现在需要找出名字中有"王"的员工,
并且在B列中显示"有王", 否则显示"没有王".
我们一步步来, 首先, 我们先用Find函数查找"王": = FIND("王", A9) , 然后往下拖一下, 就看到如下的结果:
很明显, 大家可以看到其中两个员工名字里面有王, 另外两个没有. 所有Find函数就得出了错误的结果(因为找不到) #VALUE! 这个结果我们可以用ISERR函数来判断. 如果是错误值则说明没有找到, 则显示"没有王", 否则说明找到了, 显示"有王". 所以函数就可以这么写:
B9 =IF(ISERR(FIND("王",A9)),"没有王","有王") ; 结果如下:
我们来解读一下这个函数 (如下): 如果Find函数没有找到"王"这个字, 则会出错, 所以ISERR()函数的结果就会是TRUE, 即执行第二个参数, 显示"没有王".
例子2: B17和B18两个单元格是让用户输入数字的位置. 我们的要求是: 在B21中显示这两个数 B17*B18 和 B17/B18 中较大的一个数.
熟悉了前面讲的函数的朋友一定会说: 太简单了. 这样写:
B21 = IF(B17*B18>B17/B18,B17*B18,B17/B18) -- 试几个数字, 发现结果正确
但是, 我们在写函数的时候, 要充分考虑各种情况, 比如: 用户可能只输入一个数字? 或者第二个数字是0(任何数除以0都出错) ...所以我们要让我们的函数强壮, 就要多想想会出现什么情况, 这样, 以不变应万变!
所以函数就变成: B21 = IF(OR(B17="",B18=""),"",IF(B18=0,"数字2不能为0",IF(B17*B18>B17/B18,B17*B18,B17/B18)))
其中蓝色部分先确保两个单元格都有内容, 绿色部分确保被除数不为0 .... 当然如果要更加严密, 还要考虑输入的是否是数字(可以用ISNUMBER函数)等等
例子3: 公司要求每个人都必须通过三个测试(TestA, TestB, TestC), 这天老板要看看Team下面每个人的测试情况, 是否每个人都过了. HR提供给了老板以下数据(A26-A29), 数据是 名字加上通过的测试, 名字和测试/测试和测试中间都用下划线隔开 (没有通过的测试会空过去, 例如A27有两个连着的下划线). 老板让你把没有全部通过的人找出来. 要求你在B列中显示出来: 如果全过了就"名字"+"全过了"; 否则显示"名字"+"没有全过".
那么以上该如何做呢?
首先要判断有没有都过, 就是要在A列中查找(Find) TeatA/TestB/TestC
- 如果有其中一个找不到, 就说明没有全过, 然后用IF函数显示相应的内容.
- 名字用Left就能找出来 (可是怎么显示"名字"+"全过了"呢? 这个时候我们插入一个函数 "&", 这个函数很简单, 没有参数, 直接用 A&B, 就可以把A和B连接起来)
对应上面的步骤, 我们开始写函数:
- A26 =
OR(ISERR(FIND("TestA",A26)),ISERR(FIND("TestB",A26)),ISERR(FIND("TestC",A26))) -- 显示False的说明三个Find都没有错误, 即三个Find都找到了需要的值. 因此这个函数如果结果是"False"则说明"全过了"
- A26 = LEFT(A26,FIND("_",A26)-1) &
IF(OR(ISERR(FIND("TestA",A26)),ISERR(FIND("TestB",A26)),ISERR(FIND("TestC",A26))),"没有全过", "全过了") -- 前面的Left函数取出名字; 后面的IF通过上面的结论来判断是否全过.结果如下:
因为每个例子的讲解都是Base在大家已经学会了之前说过的函数, 所以当用到之前的函数时我只会带过, 只有相对复杂的我会讲详细一些. 我的更新速度很慢, 希望大家能够对每个函数充分理解, 谢谢.
例子4: 下面有一系列字符串(A10-A16), 全部都是三位的数字和字母组合, 且都是以数字开头. 请提取出每个字符串前面的数字(可能为1-3位). 并将各位数显示在B列.
这题怎么做呢? 因为我们不知道数字和字母的间隔有什么规律, 只知道每个字符串都是三位, 而且是以数字打头, 所以可以确定第一位是数字, 然后我们需要做的是判断第二位, 第三位是不是数字. 然后就可以把数字提取出来, 然后再把各位数找出来.
有了思路, 我们的函数就好写了.
取出每个字符串中前面的数字可以这么写: =
IF(ISERR(LEFT(A11,2)*1),LEFT(A11,1),IF(ISERR(A11*1),LEFT(A11,2),A11))
拆分开来就是:
- 看看字符串的前两位是不是数字(如果乘以1出错则说明不是数字), 如果出错了, 那么ISERR()的结果是TRUE, 那么说明只有第一位是数字, 我们就用Left函数取第一位就可以了.
- 如果没有出错, 则说明前两位都是数字, 那么我们要用同样的办法判断整个字符串是不是数字即可.
那么怎么样才能把得出的数字只显示各位数呢? 非常简单嘛, 用Right函数就可以了. 所以整个函数就是:
B11 =
RIGHT(IF(ISERR(LEFT(A11,2)*1),LEFT(A11,1),IF(ISERR(A11*1),LEFT(A11,2),A11)))
版权声明:本文标题:#VALUE!, #REF!, #DIV0!, #NUM!, #NAME, or #NULL!函数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702833033h432580.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论