|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
single_star达人已经给出了解决的办法,但是我还没有理解,整个公式是怎么出来的,希望有人能指点。
附件是完成了的表格,部分公司不是很清楚。
原始标题数列list0和原始资料数列num0我明白
list0=Sheet1!$A$2:$A$9
num0=Sheet1!$B$2:$B$9
下面是存在疑问的公式,sn0,sn1,sn这几个数列是怎么得来的,公式没看明白。另外怎么在excel中显示出list0,sn0等定义了名称数列的值?
not_zero----资料非零次数
not_zero=COUNTIF(num0,">0")
资料非零次数not_zero是指num0中非0个数4么?
sn0----依标题数列列数N产生1,2,3~N的数列
sn0=ROW(list0)-ROW(OFFSET(list0,0,0,1,1))+1
这里的ROW(list0)已经是行号了,数列是{1;2;3;4;5;6;7;8},ROW(OFFSET(list0,0,0,1,1))又是什么,为什么要这么计算
sn1---依非零次数n产生1,2,3~n的数列
sn1=ROW(OFFSET(list0,0,0,not_zero,1))-ROW(OFFSET(list0,0,0,1,1))+1
sn2---当原始资料num0为数字并且>0时赋予sn0值,否则赋予成Rows(num0)+1=N+1
sn2=IF(ISNUMBER(num0)*(num0>0),sn0,ROWS(num0)+1)
sn3---符合要求资料所在次序:依sn2数列依序找出第1小至第n小的数列
sn3=SMALL(sn2,sn1)
list1---筛选后标题数列:依符合要求资料所在次序(sn3)求出新的标题列
list1=LOOKUP(sn3,sn0,list0)
num1---筛选后资料数列:依符合要求资料所在次序(sn3)求出新的资料列
num1=LOOKUP(sn3,sn0,num0)
[ 本帖最后由 watership 于 2009-10-14 10:12 编辑 ] |
|