ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-10-27 11:48 | 显示全部楼层
1、非0为True,0为False——我们的书里也有写啊,这是在逻辑判断中的转换原则,但0与FALSE、非0数值与TRUE并不是完全相同,这样的表述需要在“逻辑判断”的前提下才严谨。否则,能说FALSE=0,TRUE=1,TRUE=2、TRUE=1.3……吗?
2、我只能再强调一次——本人说的是在函数参数向导中的信息错误,并没有说帮助文件中IF函数的信息错误
3、您的观点已经改变了:一开始您说这是一句“完全正确的废话”现在又说是错误的。
4、关于省略——我们的辩论最多在于概念不统一
(1)=if(59>60,,"计算错误")——这个公式没有省略IF的任何参数,您的“省略”与《精粹》的“省略”不是一个概念。
(2)=if(59>60,,)——这个公式,按《精粹》仍然是没有省略任何参数,只是“简写”第2、3个参数;按您的意思则是省略了第2、3个参数。
(3)=if(59>60,)——这个公式,按《精粹》则是省略第3参数、简写第2参数。按您的意思仍然是省略了第2、3个参数。先找出共同点:我们、以及微软的帮助和函数参数工具中的信息都一致认为第3参数省略了。这种省略,因为条件59>60为假,应返回第3参数的值——“如果忽略,则返回FALSE。”一点儿也没错。

再回头看公式2:如果改为=if(61>60,,)——因为条件61>60为真,应返回第2参数的值——“如果忽略,则返回TRUE。”,而事实上返回的是0,按照您所言“0为FALSE。”原则也格格不入。

综上所述,在Excel函数参数工具中那句话“如果忽略,则返回TRUE。”绝对的错误。

关于用“省略”“简写”区分代替微软“忽略”一词:如果按您的理解,公式2、3都是IF的第2、第3参数都“省略”了,那么按理返回的公式结果应该是一样的,但事实是有逗号的返回0,无逗号的返回TRUE或FALSE,与其这样容易混淆,不如直接概念上规定——不留逗号的算省略,留逗号的算简写。chrisfang版主也说得很清楚——我们在概念上加以区分,对读者来说是负责任的。

至于“当第1个参数为真时,第2个参数不能省略”——这样的表述是基于您理解的“省略”概念,而非《精粹》一书的概念。如果概念相同,辩论也就没有必要了。

[ 本帖最后由 gouweicao78 于 2008-10-27 12:00 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-27 14:40 | 显示全部楼层
您说得很对,我们的辩论最多在于概念不统一。
我之所以改变观点,是因为“省略”这个概念总是不断在变化。总忘记《函数》自定义的“省略”、“简写”两个概念。
事实上,我们在If函数中指的“省略”就是 =if(59>60,,"计算错误")
一般的人,不会在写If公式时,会按第2种或第3种概念去省略,即只写测试条件,不写要返回的值。

[ 本帖最后由 wjmm 于 2008-10-27 14:44 编辑 ]

TA的精华主题

TA的得分主题

发表于 2008-10-27 15:40 | 显示全部楼层
事实上,我们在If函数中指的“省略”就是 =if(59>60,,"计算错误")

是您,不是我们。

其实,在《精粹》之前,只见过微软的“忽略”,没有“省略”与“简写”概念供我们使用。所以我以及一些曾与我讨论的版主们都有过对如何表述没写参数时,感觉很不协调,尤其是MATCH的第3参数:
有逗号与无逗号的情况差别太大,论坛上也曾讨论过是否该使用=MATCH(A1,A1:A10,)这样保留逗号的而不写出参数值的用法,也曾像您一样有人说过这是“不规范”的写法,有兴趣您可搜搜看。
但随着使用这类保留逗号方法的人的增多,不得不说,大家可以接受并认同它与=MATCH(A1,A1:A10,0)相同。
那么再回头看MATCH(A1,A1:A10,)与MATCH(A1,A1:A10)——保留逗号与不保留逗号的方式,结果两个公式是大不同的,而大不同的公式却用同一个“忽略”概念描述它们是很不恰当的。

虽然这是一句小小的表述,但作为EH的图书,我们敢于直面软件本身的错误或者容易造成读者分歧的表述,敢于用EH自身的概念(08版《精粹》关于“三维引用”的章节也是区分帮助文件中的概念以及在EH广为人知的引用函数产生的三维引用;在数组章节,也更细致地描述了关于数组的一些特征性的东西,这是市面上其他Excel书籍所没有的),而不是直接copy帮助文件,这也是07版《精粹》上市一年半已印刷达9次之多的原因之一,也是其他EH图书的特色。

[ 本帖最后由 gouweicao78 于 2008-10-27 15:49 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-28 08:35 | 显示全部楼层
哦,明白了,
建议把“省略”定义放到“本书约定”中。
另外,微软一般只把欲省略的最后N个参数叫“省略”,
中间的“省略”参数叫“可选项”
不过,象“IF第2个参数不能省略”这样的废话我可以写一大堆。
如:“MATCH的第2个参数不能省略”,“OFFSET第2个参数不能省略”等等
事实上,你应该提醒我们注意的不是“能不能省略第2个参数”,
而是,“测试条件为真时,而当第2个参数又被忽略时,返回值为0而不是True”

[ 本帖最后由 wjmm 于 2008-10-28 09:26 编辑 ]
Snap5.gif

TA的精华主题

TA的得分主题

发表于 2008-10-28 09:50 | 显示全部楼层
原帖由 wjmm 于 2008-10-28 08:35 发表
哦,明白了,
建议把“省略”定义放到“本书约定”中。
另外,微软一般只把欲省略的最后N个参数叫“省略”,
中间的“省略”参数叫“可选项”
不过,象“IF第2个参数不能省略”这样的废话我可以写一大堆。
如: ...


您这叫明白了?呵呵。
既然微软“……中间的省略参数叫可选项”,既然微软的“省略”没说但就是包含了参数前面的逗号一起省略,
那么您理解的“省略”就更不应该把微软称之为“可选项”而《精粹》称之为“简写”的方式包含进去。

辩论这么久,我只能请您具有针对性看待、阅读、并回答问题,即争论来源于《精粹》46页那句话,说的是微软提供的函数参数提示工具错误,微软说它可以“忽略”,《精粹》特地告诉大家是不能省略的。再一次贴出这张微软有错误信息的图,提醒您一下:
JRAunLNo.jpg
不知道为何这么必要的提醒被定义成“废话”
别的函数比如MATCH、OFFSET没发现这样的错误,当然不需要写这样的话,如果写了那才是真正的“废话”。

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

TA的精华主题

TA的得分主题

发表于 2008-10-28 10:11 | 显示全部楼层
原帖由 wjmm 于 2008-10-28 08:35 发表
测试条件为真时,而当第2个参数又被忽略时,返回值为0而不是True


这个建议表明您仍不接受《精粹》的“省略”、“简写”概念,而仍然沿用微软的“忽略”。从您找到的“可选项”概念来说,您这句话也不应该使用“忽略”一词。

前面回帖中已经解答了不使用微软的“忽略”就是不希望读者还被这个含糊的词弄混了,弄得不知道到底“忽略”是否保留逗号——以您为例,您也这么久才找出证据来说明包含逗号,那么从chrisfang版主找的例子中去看呢,是否要求所有读者去翻遍微软的帮助呢,这显然是没有必要的。

另,《函数精粹》技巧14专门写了“省略”与“简写”,而且是作为“函数参数”的一种用法,是否在“本书约定”中作说明,我再征询一下Kevin意见。

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-28 10:47 | 显示全部楼层
重申我的观点:
关于If函数,你应该提醒我们注意的不是“能不能省略第2个参数”,
而是,“测试条件为真时,而当第2个参数又被忽略时,返回值为0而不是True”

因为没有人会这样写=If(参数1,参数3),  <------【省略】参数2
这样写,只会让人理解为=If(参数1,参数2)<----- 【省略】参数3
最多只会写=If(参数1,,参数3)          <------【略】参数2

如:
=if(59>60 ,,"BBBB"),的返回结果是"BBBB"
此时【忽略】了第2个参数,而且"BBBB"也是我想要的结果
也就是说,当条件测试值为假时,我们并不用关心条件为真时的返回值是什么的情况下,
参数2可以忽略为空。

你应该强调的是,“测试条件为真时,而当第2个参数又被忽略时,
返回值为False(零)而不是True”
如=if(59<60 ,,"BBBB"),的返回结果是0

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-28 11:11 | 显示全部楼层
当要省略的参数在中间时(后面还有要写的参数时),应该写逗号,
Snap6.gif
当是要省略最后N个参数时(后面没有要写的参数时),不写逗号

TA的精华主题

TA的得分主题

发表于 2008-10-28 11:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 wjmm 于 2008-10-28 10:47 发表
因为没有人会这样写=If(参数1,参数3),   <------我认为这叫【省略】参数2——确实没有人会这样写
这样写,只会让人理解为=If(参数1,参数2),<---  我认为这叫【省略】参数3——这一点我们意见相同,那么根据前面这2句话,也就是说参数3以及前面的逗号都去掉叫【省略】参数3,再连参数2以及前面的逗号都去掉叫【省略】参数2,即=IF(参数1),这是做不到的,也就是《精粹》里说的不可以省略参数2的意思。
最多只会写=If(参数1,,参数3)            <-----我认为这叫【忽略】参数2——这一点我们只是称呼不同而已

从上面这段话,相当于:您使用了一个与《精粹》基本一致的【省略】概念和一个微软本已含糊的【忽略】概念,而且这两个相近的词让读者也不易区分;问题就成了“忽略”与“简写”的概念PK了,相比较而言,《精粹》的“省略”和“简写”很有优势。


原帖由 wjmm 于 2008-10-28 10:47 发表
你应该强调的是,“测试条件为真时,而当第2个参数又被忽略时,返回值为False(零)而不是True”


问题1、前面回帖中已经提醒FALSE与0并不是完全相同的,此处不能用【FALSE(零)】来说。
问题2、您建议强调的这句话,翻译成《精粹》的概念即“测试条件为真时,而当第2个参数简写时,返回值为0而不是True。”,那么,根据《精粹》的概念、以及您楼上的“省略”概念:(1)无法使用=IF(参数1)来省略参数;(2)没人可以写=IF(参数1,参数3),这会被认为是=IF(参数1,参数2);(3)=IF(参数1,,参数3)——是参数2的“简写”或者您说的“被忽略”。——充分证明第2参数是不可省略的。

《精粹》中提醒的不可省略并无错误,既然不可以省略,那么就要求在公式中给出第2参数来,可以使用逗号占据参数位的置代替逻辑值FALSE、数值0 或者空文本的简写方式来让它返回0,也可以写出具体参数值让它返回具体值,比如=IF(参数1,"")、=IF(参数1,"OK")等等,为何就非要强调让大家去简写再说它返回0而不是TRUE呢。

提醒一下:除了=If(参数1,,参数3)——参数2简写了,
=If(参数1,,)——参数2、3都简写了
还可以写出这样的公式=If(参数1,)——参数2简写了,参数3省略了。这样如果参数1为真,返回0,为假则返回FALSE。

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-28 15:20 | 显示全部楼层
我不知道我有没有理解错,你说的省略第二个参数的意思是=IF(参数1),
但这样写,微软马上就会报错。所以“不能省略第2个参数”是句废话。

如果我理解错了,麻烦你举个错误的例子,
也就是举个你认为读者会可能怎样省略第2个参数的错误例子,不要在这绕来绕去的,我几乎被绕糊涂了。

另外,我想请问下,在If函数中,True或False等于数字几呢?(1、0、-1都不是True或False)

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

本版积分规则

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

GMT+8, 2024-11-25 06:47 , Processed in 0.034092 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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