ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 关于【揉合函数】〖 IF({1,0},数组1,数组2) 〗的图示

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-8-20 23:41 | 显示全部楼层 |阅读模式
本帖最后由 岁月无恒 于 2015-8-21 10:07 编辑

IF({1,0},,)这种写法,称作揉合函数。他的作用是将多个数组揉和成一个数组,以便于计算。但是,对于垂直数组和水平数组,它的效果是不一样的,详见下图:

揉合垂直数组(单列多行数组)的示意图:

IF({1,0},,)单列多行数组示意图

IF({1,0},,)单列多行数组示意图

它把两个两个一列多行的垂直数组,揉合成了一个两列多行的数组,效果见下图:
IF({1,0},,).jpg


揉合水平数组(单行多列数组)的示意图:

IF({1;0},,)单行多列数组示意图

IF({1;0},,)单行多列数组示意图

它把两个两个一行多列的水平数组,揉合成了一个两行多列的数组,效果见下图:
IF({1;0},,).jpg

需要注意:
1、揉合数组的时候,被揉合的两个或多个数组,数组的方向必须一致,即同为垂直数组或者水平数组;
2、被揉合的两个或多个数组,数组的大小必须一致,即数组的行树和列数要一样;
3、揉合水平数组时,{1;0}中间用分号隔开,数组元素之间用逗号隔开【,】;
4、揉合垂直数组时,{1,0}中间用逗号隔开,数组元素之间用分号隔开【;】;
5、此为利用IF函数对条件真假判断来实现对数组重新排列组合,在写法上可灵活变通,IF({1,0},{},{})、IF({0,1},{},{})、IF({0,0,1},{},{})……可根据实际需求选择;
在5楼中,香川群子】前辈对 IF({1,0},范围1,范围2) 这种揉合方式进行了补充,完善了这种用法的讲解;
在4楼和6楼中,【香川群子】前辈分项了一个更高级、更通用的数组揉合方法:=CHOOSE()函数,对构建复杂的数组非常实用哦!
在此表示感谢!
实际应用:
这种揉合方式,常用于VLOOKUP函数中,以便实现从右往左查找,如图:
实例.jpg
大家也可参考论坛中相关问题的帖子帖子:http://club.excelhome.net/forum. ... =148450&pid=1008804





评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-20 23:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 满坛皆为吾师 于 2015-8-20 23:59 编辑

感谢分享!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-20 23:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-8-21 08:12 | 显示全部楼层
补充一个更高级的揉合函数:

=CHOOSE({2,1,3},B2:B10,A2:A10,D2:D10)

解释:
大家知道=CHOOSE()函数的一般用法:
=CHOOSE(Index,值1,值2,值3,……,值N)

其中Index值是自然数(>0的正整数),取值范围[1,N] 即不超过后面列表值的个数。

…………
此时,如果把Index赋值为常量数组,就能起到重新安排顺序的作用。

=CHOOSE({Index1,Index2,Index3……},值1,值2,值3,……,值N)

常量数组{Index1,Index2,Index3……}中的每一个Index值都是范围[1,N]的正整数,
而常量数组的个数范围可以<=N,即[2,N]个,而且顺序可以自由决定!
甚至可以重复!! 如=CHOOSE({2,1,2},值1,值2,值3,……,值N)

^_^

这个方法,更为强大、通用。

楼主例子中的 =If({1,0},范围1,范围2)
用CHOOSE函数可以写作:=CHOOSE({1,2},范围1,范围2) 效果完全一样的。



楼主

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-21 08:23 | 显示全部楼层
另外,楼主的方法并不限定必须是=If({1,0},范围1,范围2) 这样固定{1,0}的形式,
也可以反过来写作:{0,1} 即 =If({0,1},范围1,范围2) ……当然此时的顺序也是反的。

如要求顺序相同则:
=If({1,0},范围1,范围2)  相当于 =If({0,1},范围2,范围1)

并且,此常量数组中只需是0非0值即可。
即 {1,0} 或 {2,0} 或 {1.2,0} 都是等价的。但必须是常量数组,无法使用变量或单元格引用。

总之,这个和=If()条件判断函数的本来意义是一致的……条件为True真则返回第1选项、条件为False伪则返回第2选项。
=If(条件,真之选项,伪之选项)

只不过是把条件用常量数组来代替一下,按常量数组结果同时返回真之选项,伪之选项或伪之选项,真之选项。

=If({1,0},,) 返回  ,的顺序,
=If({0,1},,) 返回  ,的顺序,


呵呵。


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-21 08:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 香川群子 于 2015-8-21 10:05 编辑

补充:

更高级、通用的数组揉合方法,是使用=CHOOSE()函数。

我们知道=CHOOSE()函数的用法:

=CHOOSE(Index,值1,值2,值3,……,值N)
返回Index索引值指定顺序的值。

其中Index是自然数(>0的正整数),取值范围[1,N] 即不超过后面列表值的个数N。

那么,如果Index同样也可以用常量数组来代替,以便返回多个值。

=CHOOSE({索引1,索引2,……,索引n},值1,值2,值3,……,值N)
其中,索引值的个数n不限,但取值范围[1,N],而且索引值可以乱序、可以重复!!!
即,{1,2} 或 {1,2,3} 或 {3,1,2} 或 {2,1,2} {1,2,3,3,2,1,2,3,1,2,1,3}都是合法的!

…………
楼主例子中的 =If({1,0},范围1,范围2)
只要这么写就可以了:=CHOOSE({1,2},范围1,范围2)

而=If({0,1},范围1,范围2) 对应的是:
=CHOOSE({2,1},范围1,范围2)

呵呵,科普一下,不用谢。






点评

玩起 表格数组了啊。  发表于 2015-8-21 17:31

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-21 10:00 | 显示全部楼层
本帖最后由 EXCEL菜鸟N 于 2015-8-21 11:06 编辑

索引值,应小于等于列表值的个数N。学习了。

TA的精华主题

TA的得分主题

发表于 2015-8-21 10:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主例子中,也有常量数组的索引重复例子 =If({1,0,1},范围1,范围2)

但它的局限性在于: 仍然只允许有2个范围参数: 真之值、伪之值。
常量数组数量不限,但只允许有真(非0值)、伪(=0)这两种值。

…………
所以,如果要构建较为复杂的多范围数组,建议使用=CHOOSE({},值1,值2……)函数。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-21 10:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2015-8-21 10:02
楼主例子中,也有常量数组的索引重复例子 =If({1,0,1},范围1,范围2)

但它的局限性在于: 仍然只允许有2 ...

前辈说得对,if函数本身的参数有限,不管条件如何变化,都只能对两个数组进行重新排列和组合,除非使用多层IF嵌套,否则无法突破这个限制。
如果要实现对两个以上的数组排列组合,使用CHOOSE函数,是比较理想的方法。

TA的精华主题

TA的得分主题

发表于 2015-8-21 10:28 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 08:29 , Processed in 0.053978 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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