ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[函数用法讨论系列16] Countif函数内部参数隐含交叉计算问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-1-15 17:58 | 显示全部楼层

4维引用具体的应用要我们去发掘,这里说的是offset和indirect有此特性。

http://club.excelhome.net/viewthread.php?tid=98081中的第三部分应用实例,最后一个例子就是四维引用。

4维引用的转换结果已经是二维数组了,这是Excel内置函数能处理的上限。5维以上引用Excel就不能进行正确处理了。

[此贴子已经被作者于2006-1-15 17:59:32编辑过]

TA的精华主题

TA的得分主题

发表于 2006-1-15 19:06 | 显示全部楼层
Sumif也存在同样的特点。 =SUMIF(OFFSET($B$91,,,ROW($B$91:$B$97)-ROW($B$90)),$B$91:$B$97,OFFSET($C$91,,,ROW($B$91:$B$97)-ROW($B$90))) 注意这里的第三个参数不能简写成$C$91
[此贴子已经被作者于2006-1-15 19:10:30编辑过]

TA的精华主题

TA的得分主题

发表于 2006-1-16 11:00 | 显示全部楼层

如果一个函数有两个以上的参数可以为区域引用,且其中一个参数是多维引用,另一个参数的引用行列中一个方向与此多维引用产生的区域排列方向一致,那么就会缠产生隐含交叉计算问题。这类似于直接存入单元格中的两个引用的隐含交叉,只是它直接在函数内部计算完成。

目前发现,支持在函数内部产生隐含交叉计算的有Rank,Countif,Sumif等。

TA的精华主题

TA的得分主题

发表于 2006-3-2 22:02 | 显示全部楼层

类似于公式结果同单元格区域之间的隐含交叉引用,在函数内,参数间也存在着隐含交叉计算,是数组参数之间一一对应的运算关系。

函数参数也可这样划分为两大类:其中一类只支持单元格引用,不能输入数组或常量;另一类只支持常量或数组,把单元格区域引用作为常量或数组看待。

交叉计算,实际上是同类或两类参数之间的数组对应运算。几乎每个函数都存在交叉计算的情况。例如,在SUM(A1:B10,C2:D11)这个公式里,就存在参数的交叉计算,是各行各列的单元格一一对应,属于第二类参数内部的隐含交叉计算。

又如,Rank(A1:F5,offset(A1:F1,ROW(A1:F5)-ROW(A1:F1),)),这个公式的情况是,第一类参数和第二类参数之间存在着交叉计算。其中offset的多维引用被看作是,多个连续引用区域组成的“区域数组”,这个概念在[浅谈引用函数产生的多维引用及其应用]中已有提及。

还有一些情况,我们以后再说。需要强调的是,交叉计算的实质是两个或多个“数组”的行列对应计算。这里的说的数组,可以是“区域数组”,也可以是“纯数组”。

[此贴子已经被作者于2006-4-2 12:49:44编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-31 16:57 | 显示全部楼层

怎么又是这样的目录,必须回复一下才可以?

TA的精华主题

TA的得分主题

发表于 2007-12-14 22:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-8-15 15:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
{=IF(ROW(1:1)>SUM((COUNTIF(OFFSET(data,ROW(data)-2,,3),data)=3)*(data<>OFFSET(data,-1,))),"",INDEX(A:A,SMALL(IF((COUNTIF(OFFSET(data,ROW(data)-2,,3),data)=3)*(data<>OFFSET(data,-1,)),ROW(data)),ROW(1:1))))},下拉。其中OFFSET(data,ROW(data)-2,,3),data是A2:A24,ROW(data)返回每项所在的行号,即2至24,形成数组,可想象为A2:A24这个区域往下移动,形成A2:A24、A3:A25等,在此基础上,在每个数组中截取前三个,形成A2:A4、A3:A5。外层COUNTIF,在以上每个数组(3个1组,共23组)中逐个搜索A2到A24单元格的内容,形成23个数组,每组23个数值,形成一个矩阵,最终返回对角线(左上角到右下角)的数值。如内容超过3个,将出现于多个3个1组的内容中,data<>OFFSET(data,-1,)用于判断是否连续出现,如出现则返回FALSE,与COUNTIF相乘,用于去重,将连续出现相同内容的3个一组的数组的搜索结果判定为FALSE。INDEX中的IF用于返回以上结果对应的行号,SMALL用于获取这些行号,INDEX返回对应的内容。下拉时如超出个数,将返回错误值,用SUM计算总个数,与递增的个数对比,如超出,则返回空白值。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 05:51 , Processed in 0.032955 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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