ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]if({1,0},数组1,数组2)原理剖析-猜想

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2008-4-24 07:38 | 显示全部楼层 |阅读模式
QUOTE:
以下是引用denglinhai在2008-4-24 0:04:03的发言:

if({1,0},…,…)表达什么意思?怎么可以将两列合并起来?

可否举例解释一下,谢谢

恩,再尝试讲一下,也不知道是否能讲清楚。我把所有普通公式中的单值参数换成数组的都叫成数组公式,并大声的叫,因为这不费电。

既然是数组公式,那么在参数变量和值变量之间(就是条件区域,TRUE区域,FALSE区域)就必须一一对应,好么,这里几乎什么都不对应。不过这里正好全是特殊情况。

这里都是一维数组,数组具有方向性,要么是行数组,要么是列数组。特殊的单值常数在数组运算中会自动的匹配成合适的数组。

这个情况怎么说呢,这么说吧 5+row($1:$4),其实等于 {5;5;5;5)+row($1:$4),说的就是这个意思,我们把这个称做常数的单值自适应特性吧。哦,这个你当然懂。常熟在任何方向上都是单值,具有形变自适应特性,关键我要引出的是行数组,一维行数组,在列方向上也是单值的,也具有列方向上的自适应特性。这里行数组是指{1;2;3;4},列{1,2}这样的形式。这个情况怎么说呢,这么说吧 {5;5;5;5}+{1,1;2,2;3,3;4,4}={6,6;7,7;8,8;9,9}而决不是多列多列之间的那种情况变成什么}={6,#N/A;7,#N/A;8,#N/A;9,#N/A}.

就是说单值行数组{5;5;5;5}在列方向上具有单值自适应特性。适应成了{5,5;5,5;5,5;5,5}.于是{5;5;5;5}+{1,1;2,2;3,3;4,4}={5,5;5,5;5,5;5,5}+{1,1;2,2;3,3;4,4}={6,6;7,7;8,8;9,9}于是我们可以说数组具有方向性和相对性,一个一维数组,在另一个方向看就是一个单值,满足方向性单值在那个方向上就具有方向性单值自适应特性。

好了,看到这里我们可以讲这个函数了。

if({1,0},行数组1,行数组2)这里条件是行方向上的单值数组,TRUE,FALSE区域是列方向上的单值数组,于是全都自适应扩散。或者我们也单从列方向也考虑好了。

{1,0}

1,TRUE,于是在TRUE区域取值,取什么,取第一列的数组,因为1在{1,0}中是第一列;

      0,FALSE,于是在FALSE区域取值,取什么呢,取第二列的数组,因为0在{1,0}中是第二列;

于是你问我FALSE区域只有一列数据呀,呵呵,太好了,你对数组公式一一对应性有很好的认识,不过这里是特殊情况,都是一维的,在列向上具有单值性,具有自适应特性,所以FALSE区域其实自适应成了两列,只是每列都相同。其实TRUE区域也是同样的情况。

     那回过头来看简单问题,if({1,0},3,4)就更好明白了吧,虽然你以前也觉得这个好明白,不过明白了单值的自适应性的化会有更深一点的印象。

     看这个题吧:看看哪个是对的:

     1.两列+一列;if({1,1,0},两列,一列)

        两列+一列:if({1,0,0},一列,两列)

     如果明白了,那么我想去看我的那个什么IF数组化就容易多了,或者精华已经领会了,只是技巧了,呵呵。

        如果你能理解三个一列相加就更好了:

       if({1,1,0},if({1,0},数组1,数组2),数组3)三列相合并

=========================================================================================

感觉这个问题有点普适性,所以拎出来独自设成帖,方面大家进来一起讨论,上面很多都是猜想,估计压力比较大

=========================================================================================

这里的精华应该是谈到的自适应理论,以为只有自适应理论的提出才能拯救数组一一对应的特性,您说是不?否则IF({1,0},数组1,数组2)的应用只能当特殊公式来多用多练,最后练就多见不怪的功夫,但是数组的一一对应特性是数组的根本,所以不是说自适应理论拯救了数组公式的一一对应性,而更应该说一一对应性的要求使得自适应性成了一个隐形的潜规则,这个潜规则对我们理解问题很有帮助。让我们的IF({1,0},数组1,数组2)回归我们数组公式的大家庭,而是一个普通的一员,如果说特殊,那么就在于IF本身的流程框架意义了。

再巩固一下自适应潜规则,呵呵 if({1,0},{1;2;3},{2;4;6})

根据自适应性理论,实际就是=if({1,0;1,0;1,0},{1,1;2,2;3,3},{2,2;4,4;6,6})这个虽然看上去碍眼,但是更能印证数组公式的一一对应性。好了。说的是不是太罗嗦了,把简单问题复杂化了,哈哈

=============================================================================================

记得一同学对次问题有疑问,我让他看这帖子,他说看了很多边了就是看不太明白,我想有空我得用另一种好理解的方式来说明,希望能看的轻松点,呵呵

[此贴子已经被作者于2008-5-22 15:44:11编辑过]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-24 07:52 | 显示全部楼层

哈哈,和czzqb版主的帖子撞车了,不知道自己是否会有盗版嫌疑,哈哈,自己去看看先,呵呵

感觉还有有点不同的,呵呵。

数组公式,我觉得来个本末倒置,具有数组公式运算特性的就当数组公式好了,呵呵。不在乎概念,在乎灵活运用也,呵呵

========================================================================================

具体例子 11 列合并

=IF({1,1,1,1,1,1,0,0,0,0,0},IF({1,1,1,1,1,0},IF({1,1,1,1,0},IF({1,1,1,0},IF({1,1,0},IF({1,0},_X1,_X2),_X3),_X4),_X5),_X6),IF({1,1,1,1,1,1,1,1,1,1,0},IF({1,1,1,1,1,1,1,1,1,0},IF({1,1,1,1,1,1,1,1,0},IF({1,1,1,1,1,1,1,0},_X7,_X8),_X9),_X10),_X11))

这个是列合并公式,呵呵。很夸张吧,稍后会稍作解释。

========================================================================================

稍后就是现在,呵呵,这里XI 都代表一列。如果是行,看懂了你就会变化了,呵呵

解释 IF函数合并理解:

if({1,0},tc,fc)

IF原理就是 条件 为 TRUE 就反回 TRUE部(tc),FALSE 就返回FALSE(fc)。

如果条件是个数组,那么在循规蹈矩以上原则下还要注意一一对应性。条件中处于N列的元素为 TURE,那么返回时也要返回 TRUE部 的第 N 列 值。(核心)

所以上面的公式结果就是 {tc,fc}.

体会:if({0,1},tc,fc)={fc,tc}

-------------------------一道优美的分割线,呵呵,臭美,哈哈------------------------------

if({1,1,0},if({1,0},tc1,fc1),fc2)=if({1,1,0},{tc1,fc1},fc2)={tc1,fc1,fc2}

    1 ---> if({1,0},tc1,fc1) 中 返回第一列数据 --------->{tc1,fc1}中第一列数据--->tc1

      1 --->if({1,0},tc1,fc1) 中 返回第二列数据 --------->{tc1,fc1}中第二列数据--->fc1

          0---->fc2 中 返回第三列数据--------{fc2,fc2,fc2}-----------fc2 :此处是我的猜想,我称为 单值 的维数自适应性,呵呵。

体会:if({1,0,0},if({0,1},tc1,fc1),fc2)={fc1,fc2,fc2}

----------------------有一道优美的分割线,看天涯一网友的帖子受感染了,呵呵-----------

如果我再讲if({1,1,1,0},...,...)那么我绝对要佩服自己了,磨叽死了,呵呵

我发觉公式处理这里合并不是很擅长,用OFFSET数组公式 我发觉会出问题,结果为VALUE,没有深究。用IF吧写公式的时候要注意方式 否则很容易把嵌套关系混淆得一塌糊涂的一塌糊涂,呵呵。

我建议 从里面最小的IF写起,然后 一个一个进行外包,注意没有 把外层的IF条件 前边都是1,后面是0,而1的个数正好对应内部IF结果的列数,这样很清晰了,不容易写错。

[此贴子已经被作者于2008-8-12 1:50:00编辑过]

TA的精华主题

TA的得分主题

发表于 2008-4-24 07:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-4-24 08:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-4-24 09:13 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-24 09:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个帖子,值得细细看完,也许你会觉得并不是原来想象的样子,黄婆卖瓜,自卖自夸,呵呵

TA的精华主题

TA的得分主题

发表于 2008-4-24 09:56 | 显示全部楼层
QUOTE:
以下是引用liujy在2008-4-24 7:53:59的发言:

参考下贴:

[讨论]IF({1,0},A3:A123&C3:C123&E3:E123,D3:D123) 怎么解释啊

这个IF({1,0}....)的解释看这里山菊花版主的解释,通俗易懂。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-24 10:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

也许说的太深奥了

[em06],呵呵

TA的精华主题

TA的得分主题

发表于 2008-4-24 11:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-4-26 10:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
慢慢看,胡班主很深入哦
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-28 02:13 , Processed in 0.048080 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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