先介绍INDIRECT,这个函数相当于其它语言里面的EVAL,功能是把参数表达式作为一个字符串进行运算,然后把运算的结果作其它函数的参数或者整个公司的结果。例如INDIRECT("A10")本质和A10是一样;再如INDIRECT("A"&A1),这个公式的结果与A1的值有关,如果A1为10那么整个公式的结果就是A10,如果A1的值是9那么整个公式的结果就是A9。
你的例子公式中的INDIRECT("1!"&XX&":"&XX)所表示的范围与XX的值有关,如果XX的值为3则整个公式的结果就是1!3:3,也就是工作表1的第3行;如果XX的值是B则整个公式的结果就是1!B:B,也就是工作表的第B列。
类似,你公式里面的INDIRECT("1!"&x&":"&x)的值与x的值有关,如果x的值是3则整个公式的结果就是1!3:3,也就是工作表1的第3行;如果XX的值是B则整个公式的结果就是1!B:B,也就是工作表的第B列。
现在介绍一下SUMIF函数,这是一个典型的按条件汇总函数,一般的格式是SUMIF(条件范围,条件,汇总范围),函数在条件范围里面找符合条件的数据,然后把对应在汇总范围里面的内容进行汇总,举例有如下表格:
A列 B列 C列 D列
1行 姓名 班级 语文 数学
2行 张三 一班 50 60
3行 李四 一班 51 68
4行 王五 二班 52 67
5行 赵六 二班 53 66
6行 钱七 二班 54 65
那么计算一班所有同学的语文成绩的公式为=SUMIF(B:B,"一班",C:C),公式的含义是把B列里面内容为一班的学生对应C列的数据加起来,结果101。
最后来看你的公式=SUMIF(INDIRECT("1!"&XX&":"&XX),$A2,INDIRECT("1!"&x&":"&x)),结果与XX和x的值有关,假设XX的值为"B",x的值为"C",那么公式就是把表1中B列值为本表A2单元格的那些行的C列数据合计起来。
此外,你的公式里面的$A2意义就是A2,在A前面加上一个$符号,表示把这个公式复制到其它列或者向左右拖动的时候A不变,如果不在A前面加上$,那么把公式向右拖动的时候会变为B2。类似的还有A$2、$A$2的写法。
试着解释一下,高手不要喷:
INDIRECT("1!"&XX&":"&XX)=得到Sumif所需要的区域,这里面缺省第二参数,默认A1-样式的引用
$A2=得到Sumif所需要的条件
INDIRECT("1!"&x&":"&x))=Sumif所需要求和的区域,这里面缺省第二参数,默认A1-样式的引
下面的教程来自于Excel帮助文档
SUMIF语法
SUMIF(range, criteria, [sum_range])
SUMIF 函数语法具有以下参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值。):
range 必需。 用于条件计算的单元格区域。 每个区域中的单元格都必须是数字或名称、数组或包含数字的引用。 空值和文本值将被忽略。
criteria 必需。 用于确定对哪些单元格求和的条件,其形式可以为数字、表达式、单元格引用、文本或函数。 例如,条件可以表示为 32、">32"、B5、32、"32"、"苹果" 或 TODAY()。
要点 任何文本条件或任何含有逻辑或数学符号的条件都必须使用双引号 (") 括起来。 如果条件为数字,则无需使用双引号。
sum_range 可选。 要求和的实际单元格(如果要对未在 range 参数中指定的单元格求和)。 如果省略 sum_range 参数,Excel 会对在范围参数中指定的单元格(即应用条件的单元格)求和。
注释
可以在 criteria 参数中使用通配符 (包括问号 (?) 和星号 (*)) 。 问号匹配任意单个字符;星号匹配任意一串字符。 如果要查找实际的问号或星号,请在该字符前键入波形符 (~)。
说明
使用 SUMIF 函数匹配超过 255 个字符的字符串时,将返回不正确的结果 #VALUE!。
sum_range 参数与 range 参数的大小和形状可以不同。 求和的实际单元格通过以下方法确定:使用 sum_range 参数中左上角的单元格作为起始单元格,然后包括与 range 参数大小和形状相对应的单元格。 例如:
=SUMIF(A2:A5,">160000",B2:B5) 财产价值高于 160,000 的佣金之和。
INDIRECT 函数
本文介绍 Microsoft Excel 中 INDIRECT 函数 (函数:函数是预先编写的公式,可以对一个或多个值执行运算,并返回一个或多个值。函数可以简化和缩短工作表中的公式,尤其在用公式执行很长或复杂的计算时。)的公式语法和用法。
说明
返回由文本字符串指定的引用。此函数立即对引用进行计算,并显示其内容。如果需要更改公式中对单元格的引用,而不更改公式本身,请使用函数 INDIRECT。
语法
INDIRECT(ref_text, [a1])
INDIRECT 函数语法具有以下参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值。):
Ref_text 必需。对单元格的引用,此单元格包含 A1 样式的引用、R1C1 样式的引用、定义为引用的名称或对作为文本字符串的单元格的引用。如果 ref_text 不是合法的单元格引用,则 INDIRECT 返回 错误值 #REF!。
如果 ref_text 是对另一个工作簿的引用(外部引用),则那个工作簿必须被打开。如果源工作簿没有打开,则 INDIRECT 返回 错误值 #REF!。
注释 Excel Web App 中不支持外部引用。
如果 ref_text 引用的单元格区域超出行限制 1,048,576 或列限制 16,384 (XFD),则 INDIRECT 返回 错误 #REF!。
注释 此行为不同于 Microsoft Office Excel 2007 之前的 Excel 版本,早期的版本会忽略超出的限制并返回一个值。
A1 可选。一个逻辑值,用于指定包含在单元格 ref_text 中的引用的类型。
如果 a1 为 TRUE 或省略,ref_text 被解释为 A1-样式的引用。
如果 a1 为 FALSE,则将 ref_text 解释为 R1C1 样式的引用。
示例
=INDIRECT("B"&A5) 将 B 和 A5 中的值 (5) 合并在一起。这将反过来引用单元格 B5,其中包含值 62。 62
在1表的XX列中查找与本表A2值相符的内容项,然后汇总这些对应项之后1表中X列的值
INDIRECT函数是取某个单元格内容后与&XX合并为一个地址,再返回这个地址对应的单元格数据。
SUMIF就是在返回的很多单元格数据中,把符合$A2条件的数据,按照INDIRECT("1!"&x&":"&x)进行汇总