从头细说MMULT.docVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大意:使用SUM()数组公式进行多条件求和,速度很慢,求助更好的方法。我推荐了MMULT()函数,但是楼主却有很多不明白。为此我翻了一下论坛的老帖,发现有很多的人都对这个函数“打怵”。 所以,我想借用hahaha3朋友的这个帖子做例子,多用点时间,从头细说一下这个让人“双腿发抖”的MMULT。希望能让更多的人明白,能用好这个利器。 看帖入门考试 看帖还要考试?是的。因为MMULT是个比较难以理解的函数。如果没有一定的基础知识,下面说的就不大好理解。 “考试”很简单,就一题: ? 问:公式=A1:A3=B1:C1的结果是几行几列的数组?不要在excel运行而直接写出答案。 答案是三行两列:={FALSE,FALSE;FALSE,FALSE;FALSE,FALSE} 您的答案对吗?特别注意核对一下其中的逗号和分号的位置。 如果您的答案不对,那就先把这个题目好好琢磨一下。 答案正确,请跟我来,开讲了—— TRANSPOSE()是干什么的? 说起来很简单,TRANSPOSE()就是转置。帮助中说:“将一行单元格区域转置成一列单元格区域,反之亦然。” MMULT和TRANSPOSE就像是一对铁哥们,MMULT走到哪里,TRANSPOSE就跟到哪里。它在MMULT里干些什么? 我们从hahaha3朋友做的公式说起。这个公式是: MMULT(TRANSPOSE(Attendance Record!B3:B271=B7:B13),(Attendance Record!E3:E721=J4:L4)*Attendance Record!K3:K721) 这个公式的第一部分就错了(Attendance Record!B3:B271=B7:B13) 错在哪里? 我们举个简化的例子: ? A1:A5=B1:B3 这个公式能得到想要的结果吗?不能。 你可以用F9来检验一下(假定A1=B1,A2=B2,A3=B3),得到的结果将是:={TRUE;TRUE;TRUE;#N/A;#N/A} 注意后面有两个#N/A。为什么?原来这个公式是这样比较的: A1=B1 ??? ?A2=B2 ?? ? A3=B3 ?? ? A4=? ??? ?A5=? 就是说两个数组(A1:A5和B1:B3)如果同样是行数组(EXCEL帮助中说的垂直数组),那么它的比较是第一数组的第一个元素和第二数组的第一个元素比较,第二个和第二个比较……问题是,第4个和第5个和谁比较?你既然没告诉它,它也就只好告诉你#N/A了。 如果两个数组都是列数组(水平数组),比较也是类似这样来进行的。 如果我们想比较的两个数组,一个是行数组,一个是列数组,那就不一样了。看这个: A1:A3=B1:C1(假定A1=B1,A2=C1,A3B1,A3C1) 这个公式会有什么结果?按F9看看:={TRUE,FALSE;FALSE,TRUE;FALSE,FALSE} 没有一个错误值,只有TRUE和FALSE,说明它们都比较过了。怎么比较的呢?3×2个数怎么出来6个结果的(或者说比较了6次)? 原来比较是这样进行的: A1=B1 ??? A1=C1 ??? A2=B1 ??? A2=C1 ??? A3=B1 ??? A3=C1 :???? 好了,现在我们知道了:由于Attendance Record!B3:B271和B7:B13都是行数组,直接比较是比较不出结果来的。怎么办?要把其中的一个“转”过来(转置),就是用TRANSPOSE函数把行数组变成列数组,这样一个行数组和一个列数组就能比较了: Attendance Record!B3:B271=TRANSPOSE(B7:B13) 原公式的后面一部分倒是对的:Attendance Record!E3:E721=J4:L4,等号前面是行数组,后面是列数组。 这就是TRANSPOSE的作用。 当然,反过来比较,公式也是成立的:TRANSPOSE(Attendance Record!B3:B271)=B7:B13 那么,在MMULT公式中,TRANSPOSE应该怎么安排? 到底应该把TRANSPOSE放在哪里?这和MMULT有密切关系。这就需要从头说MMUTL了 下面就来看MMULT()函数 MMULT()函数是怎样工作的 先看MMULT()函数的帮助。 从帮助中,我们可以得到函数的以下特性: QUOTE: 1,这是个矩阵乘法; 2,MMULT()函数的两个参数都必须是数组,而且均为数值; 3,数组1的列数必须与数组2的行数相同; 4,得到的结果也是一个矩阵,这个矩阵的行数=数组1的行数,矩阵的列数=数组2的列数; 5,不满足以上2-4条件的公式返回错误值#VALUE! 那么什么是矩阵乘法?这是高等数学里线性代数的一个概念。我们试试通过一个简单的例子来理解它: ???

文档评论(0)

80092355km + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档