ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求和失败

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-6-15 11:43 | 显示全部楼层 |阅读模式
用SUN(INDIRECT()求和,F9算出来没错,可是三键却无法得出正确结果,
这是什么情况呢?
烦请指教

求和失败.rar

11.29 KB, 下载次数: 24

TA的精华主题

TA的得分主题

发表于 2017-6-15 11:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
=SUM(N(INDIRECT("r"&ROW(A1:A5)*3+9&"c1",FALSE)))
这个我也不明白,为什么要加N。有时候还有加T的,晕了

TA的精华主题

TA的得分主题

发表于 2017-6-15 11:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-15 12:12 | 显示全部楼层
感觉就是把文本数值变成数值?可是用--或者1*又都不行,用N竟然行了。
不明觉厉,谢谢

TA的精华主题

TA的得分主题

发表于 2017-6-15 12:47 | 显示全部楼层
给你复制一段话:
N函数
N函数有两个特点,一个就是比较熟悉的数值转换
把TRUE转换成1,把FALSE转换为0,把文本转换为0

第二个特征是如果N函数的内部是引用的话,那么N函数会对引用区间起到两个作用,将引用区间变成数组,取引用区间中每个二维数据的第一个数值。从而可以让其他函数进一步运算。(一般函数只对本表维度的数据进行运算,忽略超出的维度)

第二个特点就比较抽象了。首先必须要明白什么是引用,什么是维数。
引用就不说了,说说维数:
1行为1维,1列为1维那么1张工作表及为2维。多张当然就是3维了。一般的数据计算都是2维运算,就是在当前工作表引用运算。(这里要强调一点引用单行单列比如A1:A2,A1:B1这个产生的也是一个二维的引用。如果你知道点VBA就知道了ARR=[A1:A2]那么对ARR取第一个值是ARR(1,1),所以你引用工作表上的单元格就是一个二维的引用或者讲带有二维的特性了)
那么什么是3维,4维。上面讲了多张工作表就是3维。还有就是用OFFSET对产生的引用如果偏移量或高度宽度是数组的话就产生了3维,4维或更多维数的引用。
  举例吧:
A1=1,A1=2,A3=3,B1=4,B2=5,B3=6
=OFFSET(A1,{1,2},)
这就是个三维的引用,A1带有本工作表2维的特性,{1,2}这个数组又产生了1维。
那么用SUM直接求和就会得不到想要的结果。
这时候通过N函数将其转换为数组,每个二维数组取第一个数{2,3}结束就是5
=SUM(N(OFFSET(A1,{1,2},)))
=SUM({2,3})
=5

特别说明一下第二个特点只针对引用,像=SUM(N(A1:A100>0)))
A1:A100>0 生成了一个数组,N函数内是数组非引用,那么起用第一个特性。就是把TRUE变成1,FALSE变成0

另外就是有时我们进行多条件求和时,区域中有非数字,比如文本,我们想转换一下以免出现错误值,想用N进行转换,但是基于N的第二个特性达不到要求,那么可以生成一个3维的引用,或者变通一下。
比如:
A1=1,A2=2,A3=3,A4=4 B1=11,B2=22,B3=""(公式返回的),B4=44
=SUM((A1:A4>1)*B1:B4) 这个公式就不行了
当然=SUM((A1:A4>1)*N(B1:B4))也不行(原因见上)
那么可以用=SUM((A1:A4>1)*N(OFFSET(B1,{0;1;2;3},)))
或者=SUMPRODUCT(N(A1:A4>1),B1:B4)

N()返回一个区域的第一个元素,结果仍然是数组。
a1:c1是一个区域,所以n(a1:c1)只返回一个数。
对于四维以内的多维引用是由多个虚拟区域组成的,有多少个区域n()就返回多少的数字结果。
所以N可以将三维引用转换成一维数组,将四维引用转换为二维数组。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-15 12:49 | 显示全部楼层
铮铮try 发表于 2017-6-15 12:47
给你复制一段话:
N函数
N函数有两个特点,一个就是比较熟悉的数值转换

感谢!!!

TA的精华主题

TA的得分主题

发表于 2017-6-15 12:52 | 显示全部楼层
  1. =SUM(n(INDIRECT("r"&ROW(A1:A5)*3+9&"c1",FALSE)))
复制代码
相当于
  1. =SUM(N(OFFSET(A$1,ROW(A1:A5)*3+8,)))
复制代码
indirect和offset差不多,都会产生多维


TA的精华主题

TA的得分主题

 楼主| 发表于 2017-6-22 08:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-6-22 14:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原因其实是这样的:

首先,从INDIRECT说起,INDIRECT的语法是:
    INDIRECT(ref_text,a1)
对于这个语法,我们需要注意两点:
1、第一个参数ref_text是文本值,或者说,是一个没有维度的原始值,不是数组。
2、INDIRECT函数返回一个引用,这个引用,可以是单维或两维引用。
于是,当第一个参数是一个数组的时候,INDIRECT返回多个引用,也就是说,
    INDIRECT("r"&ROW(A1:A5)*3+9&"c1",FALSE)   返回的是三维引用


然后说SUM函数。我主要是要说SUM的参数,最多只能处理两维,超出两维,就变成另一层数组公式了。

没错,是另一层数组公式,你在原来的公式外层再套一层SUM试试,就是返回你想要的45的结果:
=SUM(SUM(INDIRECT("r"&ROW(A1:A5)*3+9&"c1",FALSE)))

TA的精华主题

TA的得分主题

发表于 2017-6-22 14:17 | 显示全部楼层
其实,原来的公式SUM(INDIRECT("r"&ROW(A1:A5)*3+9&"c1",FALSE))返回了一个数组,
只不过,一个单元格只能保留一个单值,不能保留数组中的多个值。

于是,外面再套一层SUM,就可以把前一层的SUM返回的数组进行求和了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-28 16:59 , Processed in 0.059027 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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