分享

问与答83: 如何从一行含有空值的区域中获取第n个数值?

 hercules028 2020-04-26

excelperfect

Q在如下图1所示,在单元格区域G3:L3中有一组分数,但是其间存在空单元格。现在我想在单元格B3F3中使用公式来获取分数,其中单元格B3中是G3:L3中的第1个分数值,即G3中的值45C3中是第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}中第2345小的值,传递给INDEX函数后分别取单元格H3I3K3L3中的值。

也可以省略INDEX函数的参数row_num,此时的公式为:

=INDEX($A$3:$L$3,,SMALL(IF($G3:$L3<>'',COLUMN($G3:$L3)),COLUMN()-COLUMN($A$1)))

效果相同。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多