前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel公式练习64: 获取单元格区域中移除空单元格后的值

Excel公式练习64: 获取单元格区域中移除空单元格后的值

作者头像
fanjy
发布2020-05-25 16:32:44
3K0
发布2020-05-25 16:32:44
举报
文章被收录于专栏:完美Excel完美Excel

导语:在前面的文章中有一些与本文类似的案例。要想熟练掌握一门技术,就是要不断地反复练习。

本次的练习是:如下图1所示,列C中有很多空单元格,使用公式将其整理,移除空单元格并将值放置在列D中。

图1

先不看答案,自已动手试一试。

公式

在单元格D2中,输入数组公式:

=IFERROR(OFFSET(C2,SMALL(IF((List)>1,ROW(List),""),ROW(E1))-2,0),"")

下拉至单元格出现空为止。

公式中的List为名称,引用列C中的单元格区域C2:C10000。

公式解析

主要看公式中的:

OFFSET(C2,SMALL(IF((List)>1,ROW(List),""),ROW(E1))-2,0)

OFFSET函数的语法为:

OFFSET(reference, rows, cols, [height],[width])

与公式相对应:

参数reference的值为:C2

参数rows的值为:SMALL(IF((List)>1,ROW(List),""),ROW(E1))-2

参数cols的值为:0

也就是说,OFFSET函数返回以单元格C2为起点向下SMALL(IF((List)>1,ROW(List),""),ROW(E1))-2行的单元格区域。

重点看看:

SMALL(IF((List)>1,ROW(List),""),ROW(E1))-2

我们要从IF((List)>1,ROW(List),"")中获取第ROW(E1)小的值,而ROW(E1)=1,即最小的值。

对于IF((List)>1,ROW(List),"")来说,因为List是一个9999行1列的区域,所以

(List)>1

解析为由TRUE/FALSE值组成的9999行1列的数组。列C中单元格的值大于1,返回TRUE,否则返回FALSE,在工作表中演示如下图2所示。

图2

而ROW(List)则是由第2行至第10000行的行号组成的数组。

那么,IF语句生成的数组由列C中含有值对应的行号和空组成,即:

{2;””;””;””;6;7;8;””;””;””;””;13;14;15;…}

相应地在工作表中演示如下图3所示。

图3

将上述生成的数组代入SMALL函数中:

SMALL(IF((List)>1,ROW(List),""),ROW(E1))

即:

SMALL({2;””;””;””;6;7;8;””;””;””;””;13;14;15;…},1)

得到:

2

将公式向下拉时,ROW(E1)将自动更新为ROW(E2)、ROW(E3)、…等,即返回值2、3、…,获取数组中第2小的值、第3小的值、…

相应地在工作表中演示如下图4所示。

图4

这样,在单元格D2中的公式最终等价为:

OFFSET(C2, 2-2,0)

得到单元格C2中的值。

在单元格D3中的公式最终等价为:

OFFSET(C2, 6-2,0)

得到单元格C6中的值。

在单元格D4中的公式最终等价为:

OFFSET(C2, 7-2,0)

得到单元格C7中的值。

依此类推。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档