1、姓名李张王杨巩 工资8006000500040003000 姓名李张王杨巩 工资8006000500040003000 姓名李张王杨巩 工资8006000500040003000 姓名李张王杨巩 工资8006000500040003000 姓名李张王杨巩 工资8006000500040003000 汇总姓李的工资4000 说说明明: 将“汇总”表移至工作表的最后一个 定义名称 csht_name=MID(GET.DOCUMENT(1),FIND(“,GET.DOCUMENT(1)+1,31) 为当前工作表名 sht_name=MID(GET.WORKBOOK(1),FIND(“,GET.WOR
2、KBOOK(1)+1,31) 为所有工作表的一个行数组(包含“汇总”表名) 再再看看黄黄色色单单元元格格中中的的公公式式 IF(sht_name=csht_name,INDEX(sht_name,1),sht_name) 为判别工作表名数组中的值是否为当前工作表名,如是则用第一个工作表名代替 INDIRECT(IF(sht_name=csht_name,INDEX(sht_name,1),sht_name)&“!A1:F1“) 产生一个对各工作表区域的引用数组,其中第一个工作表引用两次,当前工作表不引用 注意这是对区域引用的数组,所以数组按第三维(也可认为是向Z轴)的方向排列 SUMIF将第三
3、维的引用数组转化为一个二维的平面数组,并对每一个区域引用按指定的条件(“李”)求和,返回一个二维数组 SUM函数再对这个二维数组求和 -SUMIF(INDIRECT(INDEX(sht_name,1)&“!A1:F1“),“李“,INDIRECT(INDEX(sht_name,1)&“!A2:F2“) 是因为前面的求和对第一个工作表的区域算了两次,所以要再减一次 哪怕你要汇总200个工作表,也可用这个方法。 Excelhome中的讨论帖子 SUMIF将第三维的引用数组转化为一个二维的平面数组,并对每一个区域引用按指定的条件(“李”)求和,返回一个二维数组 -SUMIF(INDIRECT(INDEX(sht_name,1)&“!A1:F1“),“李“,INDIRECT(INDEX(sht_name,1)&“!A2:F2“)