gvntw版主的函数版:本页小计、累计 OR ONLY 本页小计公式解释
公式1、A列的序号公式及改写 =IF(MOD(ROW(),J$1+1)=2,"本页小计",(COUNT(A$2:A2)+1<=MAX(Data!A:A))*(COUNT(A$2:A2)+1)) 解释: 1、 首先,J1单元格存放着每页要的行数(本例中为每20行一个小计)——这就是循环的周期。 2、 利用求余函数MOD来做循环: 公式从第3行开始ROW()取得当前行号即3,MOD(ROW(),J$1+1)èMOD(3,21)è得到余数3。 目标:在20行后的第1行,也就是第3+20行显示“本页小计”,第23行的MOD(23,21)=2,这就是我们要的条件。 修改:将Row()改为Row(1:1),则公式改为=IF(MOD(ROW(1:1),J$1+1)=0,……也是同样的目的,区别在于不拘束与公式从第3行开始。 3、 (COUNT(A$2:A2)+1<=MAX(Data!A:A))* (COUNT(A$2:A2)+1):Count只计算数值的个数,A$2:A2是一个变动的区域,下拖复制时变为A$2:A3、A$2:A4……(请先学习相对引用和绝对引用) 当序号小于等于Data原有序号的最大值时,用这个公式得到1、2、3等序号,超过时得到0,然后工具〉选项〉视图〉零值设置不显示,隐藏了0。 修改: =IF(MOD(ROW(1:1),J$1+1),(MAX(I$2:I2)<MAX(Data!A:A))*(MAX(I$2:I2)+1),"本页小计"),用Max忽略文本值的方法也可以达到。 公式2、B列的查询公式及改写 =IF(N(A3),VLOOKUP($A3,Data!$A:$H,COLUMN(),0),"")——Vlookup根据序号查找姓名。 N(A3)——如果A3是文本,返回0,否则返回数值。 此处因Data的序号是升序排列,Vlookup最后一个参数可以不用0,即模糊查找即可。=IF(N(A3),VLOOKUP($A3,Data!$A:$H,COLUMN()),"") 修改:升序排列Lookup也可以。 =IF(N(A3),LOOKUP($A3,Data!$A:B),"")——注意$A:B——A列绝对引用,B列相对引用。 公式3、C列的小计公式及查询 =IF($A3="本页小计",SUM(INDIRECT("R[-"&$J$1&"]C:R[-1]C",0)),IF$A3,VLOOKUP($A3,Data!$A:$H,COLUMN(),0),)) 如果A列是”本页小计”,则返回SUM求和,否则返回利用序号查询,同理Vlookup对升序的查询可改版为:LOOKUP($A3,Data!$A:C) Indirect函数第2参数为1或默认,表示A1引用样式,为0或False表示R1C1引用样式(请先学习引用样式),R——表示行、C表示列。 将J1的数字(20行)代入"R[-"&$J$1&"]C:R[-1]C"è得到"R[-20]C:R[-1]C"è表示当前单元格往上20行至往上1行的区域。 也就是对当前行上面的20行求和——这就是小计。
[此贴子已经被作者于2006-11-24 22:45:36编辑过] |