回复 guojiwbzm 的帖子
=(INDEX('1'!$2:$17,SMALL(IF(INDEX('1'!$2:$17,,IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,COLUMN()/2+1.5))<>"",ROW($2:$17)-1,9^5),ROW(A1)),IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,1)))
此公式是数组公式,要用三键结束的
一、先说红色部分IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,COLUMN()/2+1.5)
COLUMN(),返回当前的列号
MOD(COLUMN(),2)就是返回当前列的列号除以2的余数
IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,COLUMN()/2+1.5)这句的意思是:如是上述的余数是0,就返回当前列的列号除以2再加1,否则当前列的列号除以2再加1.5
此句段的目的是,可以从A列开始,取得2、2、3、3、4、4、5、5……这样的结果,以便下一步使用。
二、INDEX('1'!$2:$17,,IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,COLUMN()/2+1.5))
加上这里的绿色部分,用上了index(自己可以看该函数的帮助).就是说在工作表1的2行到17行中,取第n列的区域,(这里的n指第一步的结果,如果当前列是A或B列,那么这时n就是2……)
三、SMALL(IF(INDEX('1'!$2:$17,,IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,COLUMN()/2+1.5))<>"",ROW($2:$17)-1,9^5),ROW(A1))即加上了前后的粉色部分
如果在第二步的结果的列中不是空的(<>""),就返回2至17的行号再减1,否则返回9的5次方
再用small返回其中的第row(A1)个最小值。这里row(A1)是相对引用,当当前行在第一列是,就取第一个最小值,当当前行在第二列是,就取第二个最小值……
注意:这里的结果是行号
四、完整公式=(INDEX('1'!$2:$17,SMALL(IF(INDEX('1'!$2:$17,,IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,COLUMN()/2+1.5))<>"",ROW($2:$17)-1,9^5),ROW(A1)),IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,1)))
其中的IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,1)
前面第一步已说过
用index,取在工作表1的2行到17行中,第三步中的行、第IF(MOD(COLUMN(),2)=0,COLUMN()/2+1,1)列的交叉处的结果。
此组公式只需输入一次,可右拉、下拉。
|