ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: wjmm

●●●关于《函数与公式》第一章中的一些纰漏或错误

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-10-28 18:46 | 显示全部楼层
原帖由 wjmm 于 2008-10-28 15:20 发表
我不知道我有没有理解错,你说的省略第二个参数的意思是=IF(参数1),
但这样写,微软马上就会报错。


从一开始回帖至今本人的观点就没绕来绕去,基本上同样的话重复了很多遍,您可以重新阅读一次。求同存异,下面我们一起把问题剥开。
首先,我们看看“求同”:
1、您已知道不存在=IF(参数1,参数3)这直接跳过参数2的省略,这只可理解为=IF(参数1,参数2)即参数3的省略;
2、而我们又已经声明了:=IF(参数1,,参数3)——是参数2的“简写”或者您说的“忽略”;
3、您也认同了=IF(参数1,参数2)——是参数3的“省略”,那么用我们相同的观点来说“把参数以及其前面的逗号都去掉”肯定就是叫做“省略”。

因而=IF(参数1)——这样的写法就是参数2、参数3的【省略】。除此之外,您还能找到什么形式来说参数2省略呢?请注意上面第2点是参数2的简写或您说的【忽略】。
而且,正因为这样写微软马上就会报错——《精粹》才需要告诉大家:微软的那句话“如果忽略,则返回TRUE。”是错误的。(用您的【忽略】概念,公式应该是=IF(参数1,)它应该返回0而不是TRUE;用《精粹》的省略概念,公式应该是=IF(参数1),微软自己都会报错,也就是不可以省略
至此,我们已用不同的概念论证了同一个事情:必须告诉大家微软那个提示信息错了,这么有必要的事情怎么能称之为“废话”呢。

其次,我们看看“存异”,我们有两大意见分歧:

一、关于参数省略的形式(先不管用省略还是忽略)
您认为不能把=IF(参数1)称之为参数2的省略,那么我来举例反证
1、从别的函数看,比如OFFSET(reference,rows,cols,height,width),如果公式是:
=OFFSET(reference,rows,cols,height)——可以毫无疑问地说第5个参数省略了。
=OFFSET(reference,rows,cols)——可以毫无疑问的说第4个参数省略了。
那么=IF(参数1)——这种形式也可以毫无疑问的说是第2参数省略了,只不过因为微软自己会报错(所以《精粹》要告诉读者“函数参数向导那句话错了以及提示工具中IF(logical_test,[value_if_true],[value_if_false])对第2参数的[]号标识错了”。)

2、从IF函数本身而言,参数向导中关于第3参数的提示是“如果忽略,则返回FALSE。”——您是否可以理解此处的“忽略”是保留前面逗号的“忽略”?当然不会这么理解,因为那样返回的第3参数是0而不是FALSE。同样的语境下,关于第2参数的提示“如果忽略,则返回TRUE。”——您怎么又很会心地理解是保留前面逗号的“忽略”呢?
至此,本人已用例子证明《精粹》中说“IF第2参数不能“省略”即不能用=IF(参数1)。”并没有问题。只是您还觉得不能把“参数2的省略”看做只有=IF(参数1)这样的形式,而还存在=IF(参数1,,参数3)这样的形式,这个分歧请看下面第二点

二、关于是否要用【简写、省略】概念来区分【忽略】

根据第一大点,就算再退一步讲,按您的理解,微软所谓的“忽略”可以包括带逗号的和不带逗号的两种形式,那么一会儿要读者们自己去理解某个公式说的忽略是带逗号的,一会儿又要说不带逗号的,难道不容易混淆吗?(举例:MATCH的第3参数去掉后保留逗号和不保留逗号区别是很大的)。
在您的举证过程中、在此前许多研讨中,都证明了我们深受这个词之害。

在深受【忽略】一词之害之后,您还是这样认为:
原帖由 wjmm 于 2008-10-28 10:47 发表
最多只会写=If(参数1,,参数3)          <------【略】参数2

您仍然要沿用一个让人容易混淆的“忽略”概念,而不愿意接受用“简写、省略”来区分保留或不保留逗号的情况吗?

至此,本人已经通过比较论证【忽略】一词不如区分开说得清楚。如果您认可,请接着往下看:

如果已经认可了上面的论述,也就是认可“省略”就是不留逗号的那种形式,那么就可以确定P46页那句话是该提醒说“不能省略”没有错,即:微软说“如果忽略”——连这个“如果”都被否决了,还需要再说后面返回什么吗?还需要再重新假设使用了“简写”方式则“返回0而不是TRUE。”吗?

如果您仍觉得不妥,您可以选择与更多人探讨(比如发论坛短信邀请参与讨论)。

[ 本帖最后由 gouweicao78 于 2008-10-28 20:02 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-10-28 19:17 | 显示全部楼层
呵呵,二位搭台,我看戏喽!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-28 20:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 41楼 gouweicao78 的帖子

微软的“如果忽略,则返回TRUE。”这句话确实有错误。
不过错不是说“可以忽略”(你认为不能忽略),而是错在返回值错误,返回值是0而不是TRUE

if(参数1)         《-----微软自己会报错
if(参数1,,参数3)《---当参数1为假时,可以“忽略”参数2,如=if(99>100,,"计算错误")
if(参数1,)       《-----即参数2为空,返回值为0(微软说返回值为TRUE),这种写法毫无意义

不知道你提醒我们的是上面哪种“参数2不能省略”,
最好给个“省略了参数2”的(错误)例子
简要答复即可。
记得马克吐温说过,文章就像女人的超短裙,越短越好

[ 本帖最后由 wjmm 于 2008-10-28 20:48 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-10-28 22:44 | 显示全部楼层
原帖由 wjmm 于 2008-10-28 20:40 发表
if(参数1)         《-----微软自己会报错
if(参数1,,参数3)《---当参数1为假时,可以“忽略”参数2,如=if(99>100,,"计算错误")
if(参数1,)       《-----即参数2为空,返回值为0(微软说返回值为TRUE),这种写法毫无意义

不知道你提醒我们的是上面哪种“参数2不能省略”,


1、回复您的提问:《精粹》中说的不能省略是指不可以用=IF(参数1)。我的观点很明确,所谓“省略”就是连同参数前面的逗号都去掉。——因为这个写法微软自己会报错,所以需要进行对微软“如果忽略”进行正更。

2、您的=if(参数1,,参数3)——在《精粹》中称之为“简写”。如果您坚持保留逗号也叫“忽略”、去掉逗号也叫“忽略”,那么就相当于认同=MATCH(A1,B1:B10,)与=MATCH(A1,B1:B10)等价,这是错误的,或者希望读者自己重新再判断“MATCH第3参数忽略”是指哪一种情况。

3、您说“=IF(参数1,)《-----即参数2为空,返回值为0(微软说返回值为TRUE),这种写法毫无意义”仍然有问题,(1)所谓“空”,容易与""空文本概念混淆,而事实上这个公式与=IF(参数1,0)是等价的。也就是参数2的值为0的时候,可以使用这样的简写方式。
(2)您不用的公式,不能说它毫无意义。如果可以用=IF(A1>10,0),为什么就不能用=IF(A1>10,)呢。

[ 本帖最后由 gouweicao78 于 2008-10-28 23:02 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-10-28 22:54 | 显示全部楼层
原帖由 wjmm 于 2008-10-28 15:20 发表
另外,我想请问下,在If函数中,True或False等于数字几呢?(1、0、-1都不是True或False)


请您参考《函数精粹》技巧9-1 逻辑值与数值互换准则。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-29 14:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在《函数精粹》技巧9-1 逻辑值与数值互换准则中说,False就是0,True是1或非0。
但不知道是不是我搞错了,
在If函数中,参数2为True或False时都不是1或0
Snap8.gif


原帖由 gouweicao78 于 2008-10-28 22:54 发表


请您参考《函数精粹》技巧9-1 逻辑值与数值互换准则。

[ 本帖最后由 wjmm 于 2008-10-29 15:00 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-29 15:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我明白了,你担心有人写像【=IF(参数1)】的函数,
但【=IF(参数1)】的函数写出来微软会报错,“参数2不能省略”还不是废话?

也许,你担心有人【=IF(参数1,)】这样写,但这样写的返回值是固定的,
作为一个函数,其中有一个重要的要素,那就是返回值,
如果一个公式的返回值是固定的,那不如就直接写这返回值,为什么还要写这个公式呢?

我认为,微软指的忽略是像【=if(参数1,,参数3)】这样的公式,所以微软说“如果忽略”,
因为在参数1为真或为假时,它们的返回值可以是不一样的,或返回0,或返回参数3.

另外,我认为在If函数中,参数2为True或False时都不是1或0,到底是几,我也不知道

[ 本帖最后由 wjmm 于 2008-10-29 15:47 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-10-29 15:47 | 显示全部楼层
原帖由 wjmm 于 2008-10-29 15:22 发表
1、像【=IF(参数1)】的函数,写出来毫无意义,而且没人可以这样写,还不是废话?
2、我认为,微软指的忽略是像【=if(参数1,,参数3)】这样的公式,所以微软说“如果忽略”
3、作为一个函数,其中有一个重要的要素,那就是返回值,
如果一个公式的返回值是固定的,那不如就直接写这返回值,为什么还要写这个公式呢?


1、已经没有必要再重复地回答了,因为您的【忽略】概念根本与《精粹》的“省略”不一致。
请按《精粹》的“省略”概念来理解,那么第2参数省略就是【=IF(参数1)】,就是“写出来毫无意义”的一个事情,而微软却说可以做这种毫无意义的事情,因而《精粹》才有必要告诉大家说不可以做这种“毫无意义”的事。
归根结底——是因为微软说可以,《精粹》才提醒大家说不可以。如果Excel都能自动提示的问题,写到书里都统称为“废话”的话,那么不止《精粹》,我想没有哪一本不是废话连篇了。

2、关于微软“忽略”一词以及为何《精粹》要写“省略”、“简写”,前面帖子已经说清了,有问题请回头看看。

3、“如果一个公式的返回值是固定的”——不知道您的“固定的”是什么意思:
=IF(A1>60,"及格","不及格")——这个公式的返回值只有2种可能,即及格或者不及格——固定的,只有这2种可能,不会有第3种。
=IF(A1>10,)——这样的公式,返回值也只有2种可能,即0或者FALSE。——难道您想说它固定的返回0吗?
一个公式有无应用意义,要看应用的场合。

[ 本帖最后由 gouweicao78 于 2008-10-29 16:06 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-10-29 15:57 | 显示全部楼层
回复46楼:贴的图片不能直接编辑公式,但对第1个公式,您的结果就已错误。

=IF((IF(59<60,,"BBB")-IF(59<60,FALSE,"BBB")),"参数2","参数3")

IF(59<60,,"BBB")——返回什么?当然是简写的第2参数,即返回0。
IF(59<60,FALSE,"BBB")——返回什么?当然是指定了值的第2参数,即返回FALSE。
这两个式子相减(执行“四则运算”转换准则,FALSE=0)
0-FALSE——相当于0-0,当然返回0,
=IF(0,"参数2","参数3")——执行“逻辑判断”的转换准则0=FALSE,所以最后返回参数3,而不是图片中的参数2。

第2个公式:
=IF((IF(59<60,0,"BBB")=IF(59<60,FALSE,"BBB")),"参数2","参数3")
蓝色部分即:  0=FALSE——请注意,这里的等于号是比较运算符号,不是加减乘除,遵循第3条准则即“(3)在比较运算中,数值<文本<FALSE<TRUE。”,这个判断返回FALSE。
所以,第2个公式返回参数3
同理,第4个公式前面部分即:0=TRUE——也返回FALSE,所以第4个公式返回参数3。

[ 本帖最后由 gouweicao78 于 2008-10-29 16:03 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-29 16:07 | 显示全部楼层
老大,那为什么46楼中第1个公式返回的是“参数2”呢?
附公式1:
=IF((IF(59<60,,"BBB")=IF(59<60,FALSE,"BBB")),"参数2","参数3")

if(0=flase,"参数2","参数3"),按49楼说法应该返回“参数3”才对。

又附其他公式:
=IF((IF(59<60,0,"BBB")=IF(59<60,FALSE,"BBB")),"参数2","参数3")
=IF((IF(59<60,1,"BBB")=IF(59<60,FALSE,"BBB")),"参数2","参数3")
=IF((IF(59<60,0,"BBB")=IF(59<60,TRUE,"BBB")),"参数2","参数3")
=IF((IF(59<60,1,"BBB")=IF(59<60,TRUE,"BBB")),"参数2","参数3")

[ 本帖最后由 wjmm 于 2008-10-29 16:37 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 07:08 , Processed in 0.040291 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表