ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[函数用法讨论系列20] +-*/ 运算符和and/or在逻辑运算中的应用

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2006-6-9 17:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢,楼主辛苦了!

TA的精华主题

TA的得分主题

发表于 2006-6-30 21:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

受益多多呀

TA的精华主题

TA的得分主题

发表于 2006-7-2 17:07 | 显示全部楼层

SUM(SUMIF())等同于SUMIF()?

QUOTE:
以下是引用gouweicao78在2006-4-4 16:04:13的发言:
QUOTE:
以下是引用[I]yigepure[/I]在2006-4-1 21:28:31的发言:[BR]AND,OR返回的不是数组了.

这是由于AND(logical1,logical2, ...)或者OR(logical1,logical2, ...)这2个函数已经将括号内的数组运算返回的值当作一个个logical(逻辑值)来对待,And要求所有这些逻辑值全部逻辑值为真而Or要求只要有一个逻辑值为真。
所以有些公式作为单个公式应用觉得不错的公式不能用在数组公式里,比如:
=if(or(left(A1,3)={"abc","bcd","cde"}),B1)——这么一个公式表示只要A1开头3位是abc、bcd、cde的任何一种,就返回B1单元格的值。
但我们不能用=sum(if(or(left(A1:A10,3)={"abc","bcd","cde"}),B1:B10))的数组公式来实现“对A列前3位为abc、bcd、cde的项目对应的B列求和”这个念头,因为此时只要A1:A10有任何一个满足这3种开头的情况,就返回B1:B10求和值。
如果写成+号的话,这个数组公式的正确表达应该是:=SUM(IF((LEFT(A1:A10,3)="abc")+(LEFT(A1:A10,3)="bcd")+(LEFT(A1:A10,3)="cde"),B1:B10))
当然,这只是举个例子说明or返回的是单值罢了,真正用来计算这个问题还是用底下这个比较实在:
=SUM(SUMIF(A1:A10,{"abc*","bcd*","cde*"},B1))——普通公式

能否解释一下这个公式=SUM(SUMIF(A1:A10,{"abc*","bcd*","cde*"},B1))

SUMIF(A1:A10,{"abc*","bcd*","cde*"},B1)得出的应该是一单值,再套用SUM是何意思?看上去,SUM(SUMIF())应等同于SUMIF()得出的单值结果。在用“公式求值”检查时,发现不管A1:A10填入几行值,每次即使不同,但最终都显示为SUM({0,0,0}), 且可得到不同的正确结果。奇怪。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-2 17:40 | 显示全部楼层

SUMIF(A1:A10,{"abc*","bcd*","cde*"},B1)得出的应该是一单值,……

谁告诉你它得到的是单值呢,呵呵,后面的SUM({0,0,0})就说明了这一点。

sumif()第2参数为数组时返回数组,{"abc*","bcd*","cde*"}——1行3列的数组,所以返回{0,0,0}——1行3列数组。

TA的精华主题

TA的得分主题

发表于 2006-7-2 21:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-7-2 22:31 | 显示全部楼层

关于数组和单值

QUOTE:
以下是引用gouweicao78在2006-7-2 17:40:13的发言:

QUOTE:
SUMIF(A1:A10,{"abc*","bcd*","cde*"},B1)得出的应该是一单值,……

谁告诉你它得到的是单值呢,呵呵,后面的SUM({0,0,0})就说明了这一点。

sumif()第2参数为数组时返回数组,{"abc*","bcd*","cde*"}——1行3列的数组,所以返回{0,0,0}——1行3列数组。

确实是我理解错了,可能是受了EXCEL帮助文件例子的误导,其实if产生的结果可以为单值也同样可以为数组

附件为我对公式SUMIF(A1:A10,{"abc*","bcd*","cde*"},B1)的理解剖析。另外还有我对数组和单值的一些个人理解及疑惑,拿出来和大家探讨。

最后要谢谢gouweicao78大虾。

QGP4vDwh.rar (3.63 KB, 下载次数: 356)

TA的精华主题

TA的得分主题

发表于 2006-7-2 22:57 | 显示全部楼层
QUOTE:
以下是引用ifhwfu在2006-3-23 16:20:29的发言:

请问:在单元格中输入:

=True+True  结果为2,怎样解释?是不是计算机默认True为1、False=0

我认为可以这样理解:

当True、False参与计算时:EXCEL默认TRUE=1、FALSE=0,即EXCEL自动将TRUE转换为1,FALSE转换为0进行计算

如:True+True=2,True-True=0,True*True=1,True/True=1,……等等

但反过来,则为:非0数值等于TRUE,0等于FALSE(主要用于条件判断,见:http://club.excelhome.net/viewthread.php?tid=148450&replyID=315604&skin=0

注意:TRUE、FALSE本身只是一个逻辑值,不是数值。

如:=SUMPRODUCT(TRUE,TRUE)=#VALUE!,经过转换后:=SUMPRODUCT(--TRUE,--TRUE)=1

但是,SUM函数会自动将逻辑值转换成数字:=SUM(TRUE,TRUE)=2

所以也回答了13楼的问题:

以F9法看不到转化过程,比如=True+True 你用F9在公式中看是看不到=1+1的过程的,“抹黑”一个True按F9也是True,并没有变成1;比如=True+True+True*True,“抹黑”任何2个True的计算部分,也不会得到过程。

相关链接:http://club.excelhome.net/viewthread.php?tid=70964&px=0
[此贴子已经被作者于2007-10-24 8:25:30编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-21 15:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-8-3 21:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-9-3 16:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

收益斐浅~多谢两位老师~我是初学者.

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 12:21 , Processed in 0.046738 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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