请教:函数含义 有一个公式:=INDEX(A:A,SMALL(IF(COLUMN(1:1)

1个回答

  • 这个公式是数组公式,要按下SHIFT+CTRL+ENTER三键,这样公式前后就会自动加上一对花括号{=.}

    COLUMN(1:1) 因为COLUMN是求列标是第几列,而1:1指的是第一行整行,所以就会得出{1,2,3.254,255,256},这样的数组(以2003版为例,是1列~256列)

    ROW() 求行号值如ROW(A1)就是A列第一行,行号就是1,下拉后就是ROW(A2)即A列第二行,值就是2了

    IF(COLUMN(1:1)<=B$2:B$4,ROW($2:$4))

    实际上就是IF({1,2,3.254,255,256}<=B$2:B$4,ROW($2:$4) 意思为1至256这些数小于等于B2至B4单元格值的,返回对应的2,3,4行号,

    这是一个量比较大的数据对比,先是B2单元格的值去比较1至256,再是B3单元格的值去比较1至256,再是B4单元格的值去比较1至256,形成3*256个数据,假设B2,B3,B4的值是分别4,2,3.则4会小于等于1至256的1至4的4个数,即为

    {TRUE,TRUE,TRUE,TRUE,FALSE,FALSE.(此为B2与1至256比对的数据,共256个真假值);TRUE,TRUE,FALSE,FALSE,FALSE.(用分号分隔后是B3与1至256比对的数据,也是256个真假值).;TRUE,TRUE,TRUE,FALSE,FALSE.(用分号分隔后是B4与1至256比对的数据,同样是256个真假值).FALSE,FALSE}

    这样的数组,这些值中为真值的(TRUE)会分别返回ROW($2:$4)={2;3;4}这三个数,

    B2与1至256相比的是第一组256个真假值,真值的返回2,假值(即FALSE)还是返回假值;

    B3与1至256相比的是第二组256个真假值,真值的返回3,假值(即FALSE)还是返回假值;

    B4与1至256相比的是第三组256个真假值,真值的返回4,假值(即FALSE)还是返回假值;

    {2,2,2,2,FALSE,FALSE,FALSE,FALSE.FALSE,FALSE,FALSE;3,3,FALSE,FALSE,FALSE.;4,4,4,FALSE,FALSE,FALSE.FALSE,FALSE,FALSE,FALSE}

    这样的数组

    SMALL({2,2,2,2,FALSE,FALSE,FALSE,FALSE.FALSE,FALSE,FALSE;3,3,FALSE,FALSE,FALSE.;4,4,4,FALSE,FALSE,FALSE.FALSE,FALSE,FALSE,FALSE},ROW(A1))

    意思为这个数组中第一小的值,即该值为2

    公式下拉后是ROW(A2),即求第二小的值,该值也还是2

    第三小的值也是2,

    第四,五小的值是3

    第五,六,七小的值是4

    INDEX(A:A,某行号值)

    INDEX(A:A,2) 即 A列的第二行的内容

    INDEX(A:A,3) 即 A列的第三行的内容

    这样整个公式就会形成,B列写的数是多少时,C列就会出现多少个A列的内容,

    如A2是A,B2是4,这样就会在公式列出现四个A,A3是B,B3是2,公式列就会接着出现两个B,A4是C,B3是3,公式列就会出现3个C

    建议公式改成如下,公式下拉行数多时,就不会出现错误值了

    =INDEX(A:A,SMALL(IF(COLUMN(1:1)<=B$2:B$4,ROW($2:$4),4^8),ROW(A1)))&""

    如图

    这题答的辛苦,用了我一个多小时组织和录入才回答完毕,看懂后请采纳