ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

当山姆遇上乔斯,一场纷扰无可避免(sum+choose)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-2-17 18:46 | 显示全部楼层
学习了,哈哈

TA的精华主题

TA的得分主题

发表于 2011-2-17 23:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好贴,留下脚印~~

TA的精华主题

TA的得分主题

发表于 2011-3-19 09:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-5-16 14:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
留个记号,学习了

TA的精华主题

TA的得分主题

发表于 2011-7-6 09:29 | 显示全部楼层
原帖由 cchenz 于 2011-2-16 21:19 发表
choose的第一个参数如为多元多维数组,则维数不可超过VALUE值的个数,且所有的value值均须为单个数值;
若第一个参数为多元一维数组,则最后一个VALUE值可为一元多维数组或多元多维数组(这时将这多元多维数组视同为 ...

看不懂,谁能解释解释?

TA的精华主题

TA的得分主题

发表于 2011-7-31 10:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
函数真是千变万化!

TA的精华主题

TA的得分主题

发表于 2011-7-31 14:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. =SUM(CHOOSE({1,2,3,4},1,2,3,8,J6:J28))
复制代码
个人理解如下:
单行的引用得到的是水平数组如{1,2,3},数组元素之间是以逗号分隔的
单列的引用得到的是垂直数组如{5;6;7;8},数组元素之间是以封号分隔的

当单行与单列相作用时,比如相乘或相加,[a1:c1]*[a2:a5]得到的是R*C个元素的二维数组,R为行数,C为列数
本例中R=4,C=3,即得到一个4*3共12个元素的数组
版主给出的公式=SUM(CHOOSE({1,2,3,4},1,2,3,8,J6:J28)),CHOOSE函数得到的是一个23行4列的内存数组,这个数组的行数23由最后一个J6:J28参数决定的,列数则由第一个参数({1,2,3,4},决定的,这就是单行单列共同作用的结果

对于单行或单列与一个多行多列区域作用的结果也是一个二维数组,最终的行列数以大者为准,比如4行的单列与3行6列区域作用,得到的将是4行6列的二维内存数组,又如5列的单行与4行4列区域作用,得到的是4行5列的二维内存数组。为了得到最终的结果,每个参数都以各自的方式填充这个二维数组并参与运算,若单个单元格引用,则整个二维内存数组都填充这个单值,若引用为一行,则以多行的方式填充,没有的部分以N/A填充,如{1,2,3}要填充为2行4列的二维内存数组,则结果为{1,2,3,N/A;1,2,3,N/A},单列的情况类似,就以多列的情况填充。因为最终的二维数组是以参数中最大行数最大列数为行列数的,所以不会出现单行或单列超出二维数组的情况。
如果是区域与区域作用,行列数也是取大优先,如3行4列区域与5行2列区域作用,得到的是5行4列的二维内存数组

根据以上所述,可以将函数的每个参数都扩充为以最终要得到的二维内存数组为模板的内存数组,然后将相应位置上的数组素分别提出来放在函数中参与计算,最后将函数每次运算得到的结果组合返回一个二维内存在数组。所有N/A参与的计算得到的都是N/A。
这样看这面这个例子就容易得出结论了:
=SUM(CHOOSE({1,2,3,4},5,6,7,8,A5:E10))
=#N/A
最后一个参数A5:E10是一个6行5列的区域,而第一个参数只有4列,那么当第一个参数按6行5列去扩充时就会出现N/A值,参与最终的计算也是返回N/A值

而下面这个例子会得到结果,
=SUM(CHOOSE({1,2,3,4},5,6,7,8,A5:C10))
=156
是因为最后一个参数A5:C10是6行3列的,与第一个参数1行4列,得到6行4列的最终二维内存数组,这样第一参数可以多行的方式完全填充数组,不产生N/A值,而最后一个参数尽管扩充过程也会产生N/A值但不参与最终的计算,所以不影响最终结果。

其它像IF也可以有这样的结果,如
  1. =IF({1,0,0},{2;3;4;5},{7,8})
复制代码
得到的是{2,8,#N/A;3,8,#N/A;4,8,#N/A;5,8,#N/A}

以上只是个人理解,颇费周折,有点费解,望高手指点

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-2-10 22:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-8-8 19:15 | 显示全部楼层
SuperBirds 发表于 2011-7-31 14:58
个人理解如下:
单行的引用得到的是水平数组如{1,2,3},数组元素之间是以逗号分隔的
单列的引用得到的是 ...

解释的太好了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 20:58 , Processed in 0.036446 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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