购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 运算符“*”“+”与数组结合的应用

在数组与数组之间的运算中,“乘”和“加”运算是一种应用频率较高的运算方式。“乘”相当于多条件的“与”关系,也就是可以用于识别多条件同时成立的情况;“加”相当于多条件的“或”关系,也就是可以用于识别多条件中至少一个及以上条件成立的情况。

2.6.1 数组间的“乘”运算

比如{TRUE,TRUE,FALSE,FALSE}*{TRUE,FALSE,TRUE,FALSE},本质是两个数组之间的逻辑值相乘,相当于{TRUE*TRUE,TRUE*FALSE,FALSE*TRUE,FALSE*FALSE},这个公式运算的结果为={1,0,0,0}。它们的运算规则:只有全部是TRUE的相乘结果才为1,除此之外的相乘结果均为0。这种规律适用于判断多条件是否同时成立,若多条件同时成立则返回1,否则返回0。

实例20 求连续3个月销售电脑数量大于或等于50台的人数

问题描述: 图2-34所示的表中列出了每个人2017年1—3月销售的电脑数量,现在需要统计出连续3个月销售电脑数量都大于或等于50台的人数。

图2-34

解决思路: 首先分别判断每个人1月、2月、3月的销售数量是否大于或等于50,然后将比较出来的3组逻辑值数组对应做相乘运算,最后将运算出来的数组结果求和即可。

操作步骤: 如图2-35所示,首先将鼠标光标定位在单元格F3中,然后输入数组公式=SUM ((B3:B7>=50)*(C3:C7>=50)*(D3:D7>=50)),按Ctrl+Shift+Enter组合键,完成计算。

图2-35

步骤1: 计算(B3:B7>=50)*(C3:C7>=50)*(D3:D7>=50)部分,如图2-36所示,将每一组比较之后的逻辑值进行相乘运算,结果为1表示所有逻辑值为TRUE相乘的结果;结果为0表示逻辑值相乘运算中肯定有FALSE。最后运算结果为{0;0;1;0;1}。

步骤2: 将步骤1的结果求和,=SUM({0;0;1;0;1}),结果为2,即为连续3个月销售电脑数量大于或等于50台的人数。

图2-36

实例21 求部门是销售部且工资大于或等于10 000元的员工的总工资

问题描述: 图2-37所示的表中列出的是每个人的所在部门和工资,现在需要将工资求和。但要满足两个条件才能求和:一是必须为销售部员工,二是工资要大于或等于10000元,缺一不可。

图2-37

解决思路: 首先判断“部门”列的数据区域是否等于销售部,然后判断“工资”列的数据区域是否大于或等于10000(注意:如果有更多条件,便按照此规律继续编写条件即可)。之后将比较出来的两个逻辑值数组做相乘运算,得到一个由0或1构成的数组。1表示两个条件同时成立,0表示不成立。再将此数组乘以“工资”列的数据区域,便筛选出了条件成立的工资,也就是若条件成立则显示工资数据,若条件不成立则显示为0。最后将数组求和,其结果便是条件成立时工资相加的结果。

操作步骤: 如图2-38所示,首先将鼠标光标定位在E3单元格,然后输入数组公式=SUM((B3:B7=〝销售部〝)*(C3:C7>=10000)*C3:C7),按Ctrl+Shift+Enter组合键,完成计算。

图2-38

步骤1: 计算(B3:B7=〝销售部〝)*(C3:C7>=10000)部分,若两个条件均成立,则值为1;若两个条件或其中一个条件不成立,则值为0,结果为{1;0;0;1;0}。

步骤2: 将步骤1的结果乘以工资区域C3:C7,公式为{1;0;0;1;0}*C3:C7,相当于{1;0;0;1;0}*{12000;11200;9800;13000;7600},这样如果条件成立则返回工资数据,条件不成立则返回0,相当于把条件不成立的工资进行排除,计算结果为{12000;0;0;13000;0}。最后用SUM函数将此数组的值进行求和,结果为25000。

2.6.2 数组间的“加”运算

比如{TRUE,TRUE,FALSE,FALSE}+{TRUE,FALSE,TRUE,FALSE},本质是两个数组之间的逻辑值相加{TRUE+TRUE,TRUE+FALSE,FALSE+TRUE,FALSE+FALSE},运算的结果为{2,1,1,0}。它们的运算规则:只有全部是FALSE的相加结果才为0,除此之外的相加运算结果均大于0。

实例22 求销售电脑数量至少有1个月大于或等于80台的达标人数

问题描述: 图2-39所示的表中列出了每个人在2017年第一季度3个月的电脑销售数量。若每个人在这3个月中,至少有1个月的电脑销售数量大于或等于80台,则表示达标,现在要求统计有多少人达标。

图2-39

解决思路: 先分别判断“1月”“2月”“3月”中的数据是否大于或等于80,形成3个逻辑值数组,再将3个逻辑值数组进行加的算术运算,计算出的数字表示每个人达标的月数。此时不能直接将这些条件成立的数字相加,因为即使某个人3个月均达标,计算结果为3,也只能算作1个人,所以要继续判断已计算出的这个数组的值是否大于0。条件成立则表示至少有1个月是达标的;条件不成立则表示3个月都不达标。最后将逻辑值转化求和即可。

操作步骤: 如图2-40所示,首先将鼠标光标定位在F3单元格中,然后输入数组公式=SUM(-((B3:B7>=80)+(C3:C7>=80)+(D3:D7>=80)>0)),按Ctrl+Shift+Enter组合键,完成计算。

图2-40

步骤1: 计算(B3:B7>=80)+(C3:C7>=80)+(D3:D7>=80)部分,如图2-41所示,将每一组比较之后的逻辑值进行相加运算,若结果为0则表示逻辑值都为FALSE相加的结果;若结果为大于0的值,则表示逻辑值相加的运算中肯定有TRUE。最后运算结果为{2;1;0;0;3}。

步骤2: 判断步骤1的结果是否大于0,相当于公式{2;1;0;0;3}>0,将数组中的零值处理为FALSE,将大于0的值处理成TRUE,运算结果为{TRUE;TRUE;FALSE;FALSE;TRUE}。

步骤3: 将步骤2结果做算术转换处理,公式为-({TRUE;TRUE;FALSE;FALSE;TRUE}),运算结果为{1;1;0;0;1},最后用SUM函数对数组做求和处理,结果为3。

图2-41

实例23 求部门是销售部或者工资大于或等于10 000元的员工的总工资

问题描述: 图2-42所示的表中列出了每个员工的“姓名”“部门”“工资”3列数据,现在需要计算他们的总工资,但前提条件是员工为销售部员工,或者工资大于或等于10000元,两个条件至少满足一个及以上。

图2-42

解决思路: 首先分别判断“部门”列的数据是否等于“销售部”,“工资”列的数据是否大于或等于10000,再将这两组逻辑值数组相加。若结果为2,则表示两个条件同时成立;若结果为1,则表示其中一个条件成立;若结果为0,则表示两个条件都不成立。但无论是多少个条件成立都只能算作1个,所以接下来判断这个数组中的值是否大于0。然后将比较出来的逻辑值数组与“工资”列的数据相乘,若条件成立,则显示工资数据,若不成立则显示为0。最后求和即可。

操作步骤: 如图2-43所示,将鼠标光标定位在E3单元格中,输入数组公式=SUM(((B3:B7=〝销售部〝)+(C3:C7>=10000)>0)*C3:C7),按Ctrl+Shift+Enter组合键,完成计算。

步骤1: 计算(B3:B7=〝销售部〝)+(C3:C7>=10000)部分,结果为{2;1;1;2;0}。若等于2则表示两个条件均成立;若等于1则表示只有一个条件成立;若等于0则表示条件都不成立。

步骤2: 判断步骤1结果是否大于或等于0,公式为{2;1;1;2;0}>0,目的是将条件成立的转化为TRUE,不成立的转化为FALSE。运算结果为{TRUE;TRUE;TRUE;TRUE;FALSE}。

图2-43

步骤3: 将步骤2结果乘以工资区域,公式为{TRUE;TRUE;TRUE;TRUE;FALSE}*C3:C7。若条件成立,则返回工资数据;若条件不成立,则返回0。结果为{12000;11200;9800;13000;0}。

步骤4: 用SUM函数将步骤3区域进行求和运算,公式为SUM({12000;11200;9800;13000;0}),结果为46000。 CPwd1sGgKn3U2nqaNzVoxJ7zxx2kYw837mKTl1EYwzVOrHam3pCkJA8kIS4zhwex

点击中间区域
呼出菜单
上一章
目录
下一章
×