excelperfect Q:在如下图1所示,在单元格区域G3:L3中有一组分数,但是其间存在空单元格。现在我想在单元格B3至F3中使用公式来获取分数,其中单元格B3中是G3:L3中的第1个分数值,即G3中的值45;C3中是第2个分数,即H3中的值44,依此类推。如何编写这个公式? 图1 (注:这也是在chandoo.org论坛上看到的一个案例,整理在此与大家分享。) A:使用INDEX/SMALL/IF函数组合来解决。 在单元格B3中输入下面的数组公式: =INDEX($A$3:$L$3,SMALL(IF($G3:$L3<>'',COLUMN($G3:$L3)),COLUMN()-COLUMN($A$1))) 向右拉至单元格F3。(注意,输入完后要按Ctrl+Shift+Enter组合键) 先看看公式中的: IF($G3:$L3<>'',COLUMN($G3:$L3)) 得到数组: {7,8,9,FALSE,11,12} 公式中的: COLUMN()-COLUMN($A$1) 等于2-1,得到: 1 将上述两个中间结果代入SMALL函数: SMALL(IF($G3:$L3<>'',COLUMN($G3:$L3)),COLUMN()-COLUMN($A$1)) 即: SMALL({7,8,9,FALSE,11,12},1) 得到: 7 代入INDEX函数,得到: =INDEX($A$3:$L$3,7) 对于INDEX函数来说,如果省略其参数column_num,则直接取参数array中的第row_num个元素,即G3中的值,结果为: 45 当公式向右拖时,COLUMN()-COLUMN($A$1)的值递增,这样会依次取数组{7,8,9,FALSE,11,12}中第2、3、4、5小的值,传递给INDEX函数后分别取单元格H3、I3、K3、L3中的值。 也可以省略INDEX函数的参数row_num,此时的公式为: =INDEX($A$3:$L$3,,SMALL(IF($G3:$L3<>'',COLUMN($G3:$L3)),COLUMN()-COLUMN($A$1))) 效果相同。
|
|
来自: hercules028 > 《excel》