精通Excel数组公式14:使用INDEX函数和OFFSET函数创建动态单元格区域

excelperfect

动态单元格区域是指当添加或删除源数据时,或者随着包含单元格区域的公式被向下复制时根据某条件更改,可以自动扩展或收缩的单元格区域,可以用于公式、图表、数据透视表和其他位置。

那么,如何创建动态单元格区域呢?可以使用INDEX函数或者OFFSET函数。许多人倾向于使用INDEX函数,因为OFFSET函数是一个易失性函数。

什么是易失性函数?

每当Excel重新计算电子表格时,无论其引用的单元格有无变化,易失性函数都会重新计算。许多操作都会触发重新计算,例如在单元格中输入数据、插入行等。这样,易失性函数会增加公式的计算时间。下面列出了一些触发重新计算的操作:

1.输入新的数据

2.删除/插入行/列

3.执行自动筛选

4.双击行列分隔线

5.重命名工作表

6.改变工作表的位置

下面列出了一些易失性函数:CELL函数,INDIRECT函数,INFO函数,NOW函数,OFFSET函数,RAND函数,TODAY函数。

INDEX:查找行或列的公式

创建动态单元格区域的最基本的公式类型是基于条件来查找整行或整列值,可以使用INDEX函数实现。

INDEX函数有3个参数:

=INDEX(array,row_num,column_num)

通常,给参数row_num指定行号,给参数column_num指定列号,INDEX函数执行双向查找返回行列号交叉处的值。如果要获取整列,那么只需要给INDEX函数指定代表列号的参数column_num的值,忽略参数row_num(为空)或者指定其值为0。通过指定参数row_num为空或0,告诉Excel返回所选列的所有行。

同理,想要获取整行,则需要指定参数row_num的值代表行号,将参数column_num指定为空或0。这告诉Excel需要返回所选行的所有列。

图1:查找并求2月份的数值之和

注意,图1所示的公式并不需要按Ctrl+Shift+Enter组合键,虽然INDEX函数返回的是一个单元格区域,其原因是没有执行直接数组操作。下面两种情况需要按Ctrl+Shift+Enter组合键:

1.如果放置需要Ctrl +Shift + Enter进入公式的直接数组操作,则需要使用Ctrl +Shift + Enter。

2.如果想要传递多个值到多个单元格,则必须使用Ctrl +Shift + Enter。

用于处理扩大和缩小单元格区域的动态单元格区域公式

在创建动态单元格区域公式之前,必须问清楚下列问题:

1.是垂直单元格区域(一列)吗?

2.是水平单元格区域(一行)吗?

3.是双向单元格区域(行列)吗?

4.是数字、文本,还是混合数据?

5.是否存在空单元格?

对这些问题的答案决定可能使用哪种公式。

MATCH:确定数据集中的最后一个相对位置

下图2展示了4列不同的数据类型:单元格区域A5:A10在最后一项前包含混合数据,其中没有空单元格;单元格区域A16:A21在最后一项前包含带有空单元格的混合数据;单元格区域C5:C10在最后一项前包含带有空单元格的数字数据;单元格区域C16:C21在最后一项前包含带有空单元格的文本数据。在所有这4种情形下,要使用公式创建在添加或减少数据时扩充或缩减的动态单元格区域,需要确定该列中最后一个相对位置。图2中展示了6种可能的公式。

图2:对于不同数据类型查找最后一行

在图2所示的公式[2]至[6]中,展示了一种近似查找值的技术:当要查找的值比单元格区域中的任何值都大且执行近似匹配(即MATCH函数的第3个参数为空)时,将总是获取列表中最后一个相对位置,即便存在空单元格。

INDEX和MATCH函数:获取单元格区域中的最后一项

下图3和图4展示了如何使用MATCH和INDEX函数在单元格区域中查找最后一项。

图3:当有4条记录时查找单元格区域中的最后一项

图4:当有6条记录时查找单元格区域中的最后一项

使用INDEX和MATCH函数创建可以扩展和缩小的动态单元格区域

如下图5所示,在单元格E2中是一个数据有效性下拉列表,其内容来源于单元格区域A2:A5,在单元格F2中的VLOOKUP公式从单元格区域A2:C5中查找并返回相应的数据。

图5:下拉列表和VLOOKUP公式

问题是,当在单元格区域A2:C5的下方添加更多的数据时,数据有效性下拉列表和VLOOKUP公式中的相应单元格区域都不会更新。当前,在“成本”列中的最后一项是单元格C5,如果添加新记录,在“成本”列中最新的最后一项应该是单元格C6,这意味着在VLOOKUP公式中的查找区域需要从$A$2:$C$5改变为$A$2:$C$6。注意到,这两个区域都开始于相同的单元格$A$2。我们现在的任务,就是找到一种方法,当添加或删除记录时,其最后一个单元格引用能够相应更新。此时,可以使用INDEX函数。

静态的单元格区域如下:

$A$2:$C$5

创建的动态单元格区域如下:

$A$2:INDEX($C$2:$C$8,MATCH(9.99E+307,$C$2:$C$8))

注意,由于INDEX函数位于一个起始单元格引用和冒号之后,因此不再获取该区域中的最后一项,而是获取该区域中最后一项的单元格地址(单元格引用)。

此时,你在图5的数据区域中添加或删除记录,创建的动态单元格区域会自动更新。

下面是创建动态单元格区域公式的关键点:

1.足够的行以容纳所有潜在数据。

(1)如果含有数字的数据集在列C中并决不会超过50条记录,可使用:

=$A$2:INDEX($C$2:$C$51,MATCH(9.99E+307,$C$2:$C$51))

(2)如果含有数字的数据集在列C中并决不会超过500条记录,可使用:

=$A$2:INDEX($C$2:$C$501,MATCH(9.99E+307,$C$2:$C$501))

(3)如果含有数字的数据集在列C中并且不确定有多少条记录,可使用:

=$A$2:INDEX($C:$C,MATCH(9.99E+307,$C:$C))

2.不要在公式使用的单元格区域的下方输入无关数据,因为会导致公式创建不正确的区域。例如,如果公式使用潜在单元格区域$C$2:$C$50,并且最后一个数据位于单元格C25,那么不要再在单元格C49中输入数据,因为公式会将其考虑为该列的最后一个单元格。

(0)

相关推荐

  • 非空单元格计数函数counta的用法

    今天解说一下counta这个函数,它的作用是计算区域中非空单元格的个数.它可以计算包含任何类型的信息的单元格,比如错误值和空文本 ("").但它不会对空单元格进行计数. -01- ...

  • 精通Excel数组公式15:使用INDEX函数和OFFSET函数创建动态单元格区域(续)

    excelperfect 导语:本文为<精通Excel数组公式14:使用INDEX函数和OFFSET函数创建动态单元格区域>的后半部分. 将动态单元格区域公式定义为名称 创建动态单元格区域 ...

  • 精通Excel数组公式025:LINEST数组函数

    excelperfect 如果正在进行与x-y直线数据集相关的统计计算,那么一定会喜欢LINEST函数.当使用最小二乘法将数据拟合到一条直线时,LINEST函数可以进行许多统计计算.下面列出了该函数可 ...

  • 精通Excel数组公式020:MMULT数组函数

    excelperfect MMULT表示矩阵乘法(matrix multiplication).学习过前面文章的朋友,可能已经意识到乘法矩阵在Excel公式中有很多应用. 如下图1所示,两个不同队的棒 ...

  • 精通Excel数组公式018:FREQUENCY数组函数

    excelperfect FREQUENCY函数非常简单,但非常强大且功能丰富.本文介绍这个函数的基本用法,后续文章你将会看到该函数对困难的问题提供的令人惊叹的解决方案. FREQUENCY的基本用途 ...

  • 精通Excel数组公式019:FREQUENCY函数的威力

    excelperfect 在数据库中,表的第一列通常是称作为主键或唯一标识符的唯一值列表,用于验证为每个唯一标识符收集的数据是否位于一个且只有一个位置.在唯一值列表中没有重复值. 然而,在Excel中 ...

  • 精通Excel数组公式026:你弄清楚大型数组公式是怎么工作的吗?

    excelperfect 在本系列中,大部分内容都是在阐述特定数组公式如何工作的逻辑,但是假设你有一个大型的数组公式,却不知道它是如何工作的,你该怎么办?你已经学到了许多技术,弄清楚为什么一个公式正在 ...

  • 精通Excel数组公式024:模拟运算表

    excelperfect 本文介绍模拟运算表功能,其使用TABLE函数创建一个结果数组.使用模拟运算表是一种对使用公式输入的公式进行假设分析的快速而简单的方法.该功能允许修改一个或两个公式输入,显示多 ...

  • 精通Excel数组公式022:提取唯一值列表并排序(续)

    使用公式对数字进行排序 下图12展示了两个对数字进行排序的公式.使用SMALL/ROWS函数从小到大排序,使用LARGE/ROWS函数从大到小排序. 图12 使用辅助列公式对基于数字列的记录进行排序 ...

  • 精通Excel数组公式021:提取唯一值列表并排序

    excelperfect 本文将综合使用前面系列中学习到的技术,包括布尔逻辑.动态单元格区域.提取满足条件的数据.统计唯一值等,创建出一个解决问题的大型公式.当然,如果你不需要自动动态更新数据,完全可 ...