定义名称可以复制,用鼠标选择公式部分,按Ctrl+C即可。 1、X——取得筛选后Sheet1表A列的记录个数。 1)ROW(INDIRECT("1:"&(COUNT(Sheet1!$A:$A)+1)))——假设Sheet1A列的数值个数是100,则此部分返回Row(1:101)即{1;2;3;……;101}数组。 2)Offset(Sheet1A1,Row(1:101),,,)——分别从Sheet1的A1单元格偏移1、2、3……101行,即分别引用Sheet1的A2、A3……A102单元格。 3)Subtotal(102,Ref)——第一参数102,相当于Count函数并忽略隐藏(被筛选掉的)计数,返回的是由1和0组成的{1;0;……}数组,0表示被隐藏的部分,由此可用Sum(X)得到筛选后所剩下的记录个数。 2、那么长的一串公式,多数是数学计算了。即把筛选后的Sum(X)条记录分配成3组。 最重要的部分是SMALL(IF(x,1+ROW(INDIRECT("1:"&ROWS(x)))),…… 前面说了,X是1、0组成的数组,其行数=COUNT(Sheet1A:A)+1,而在逻辑判断中,0=False、非0数值=True,所以,IF(X,……则根据单元格是否被隐藏来返回,被隐藏就是False。并以此对应Row(indirect("1:"&Rows(X)))的行号——还原了原有行号。 可以进行简化,比如: =IF(1+(ROW(1:1)-1)*3+INT((COLUMN(A:A)-1)/4)>SUM(x),"",OFFSET(Sheet1!$A$1,SMALL(IF(x,ROW(INDIRECT("1:"&ROWS(x)))),1+(ROW(1:1)-1)*3+INT((COLUMN(A:A)-1)/4)),MOD(COLUMN(A:A)-1,4)))——先行后列 (Row(1:1)-1)*3——每下1行相当于在原表的3个记录 INT((COLUMN(A:A)-1)/4)——每过4列相当于在原表的1个记录。以此作为跳转行数的依据。 Mod(Column(A:A)-1,4)——每4列一个循环,以此作为跳转列数的依据。
[此贴子已经被作者于2007-5-21 10:38:35编辑过] |