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)))


本文标签: 函数 数字 没有 名字 结果