Table of contents
在本教程中,你将学习如何在Excel中创建一个动态命名的范围,以及如何在公式中使用它,让新数据自动包含在计算中。
在上周的教程中,我们研究了在Excel中定义静态命名单元格的不同方法。 静态名称总是指相同的单元格,这意味着每当你添加新数据或删除现有数据时,你必须手动更新单元格参考。
如果你正在处理一个不断变化的数据集,你可能想让你的命名范围动态化,以便它自动扩展以适应新添加的条目,或收缩以排除已删除的数据。 在本教程的后面,你会发现关于如何做到这一点的详细步骤指导。
如何在Excel中创建一个动态的命名范围
首先,让我们建立一个由单列和可变行数组成的动态命名范围。 要做到这一点,执行这些步骤。
- 关于 公式 选项卡,在 定义的名称 组,点击 定义名称 或者,按Ctrl + F3打开Excel名称管理器,然后点击 新的... 按钮。
- 无论是哪种方式, 新名称 对话框将打开,在这里你可以指定以下细节。
- 在 命名 框中,输入动态范围的名称。
- 在 范围 下拉菜单,设置名称的范围。 工作手册 (默认情况下)在大多数情况下建议使用。
- 在 指的是 框,输入OFFSET COUNTA或INDEX COUNTA公式。
- 单击 "确定",完成!
在下面的截图中,我们定义了一个动态的命名范围 项目 适应所有 有数据的细胞 在A列,除了标题行。
用OFFSET公式定义Excel动态命名范围
在Excel中制作动态命名范围的通用公式如下。
OFFSET( 第一个单元格 , 0, 0, counta( 栏目 ), 1)在哪里?
- 第一个单元格 - 指定范围内要包括的第一个项目,例如$A$2。
- 栏目 - 一个对该列的绝对引用,如$A:$A。
在这个公式的核心部分,你使用COUNTA函数来获得感兴趣的那一列中的非空白单元格的数量。 这个数字会直接进入到 高度 OFFSET(reference, rows, cols, [height], [width])函数的参数告诉它要返回多少行。
除此之外,它是一个普通的偏移公式,其中。
- 参考 是偏移量的起点(first_cell)。
- 行数 和 Cols 都是0,因为没有要偏移的列或行。
- 宽度 等于1列。
例如,要为Sheet3中的A列建立一个动态命名的范围,从A2单元格开始,我们使用这个公式。
=OFFSET(Sheet3!$A$2, 0, 0, COUNTA(Sheet3! $A:$A), 1)
注意:如果你在当前工作表中定义一个动态范围,你不需要在引用中包括工作表的名称,Excel会自动帮你完成。 如果你要为其他工作表建立一个范围,在单元格或范围的引用前加上工作表的名称,然后是感叹号(就像上面的公式例子)。
在Excel中用INDEX公式制作一个动态的命名范围
创建Excel动态范围的另一种方法是将COUNTA与INDEX函数结合使用。
第一个单元格 :INDEX( 栏目 ,COUNTA( 栏目 ))这个公式由两部分组成。
- 在范围操作符(:)的左边,你把硬编码的起始参考值,如$A$2。
- 在右边,你使用INDEX(array, row_num, [column_num])函数来计算结束引用。 这里,你为数组提供了整个A列,并使用COUNTA来获得行号(即A列中非入口单元的数量)。
对于我们的样本数据集(请看上面的截图),公式如下。
=$a$2:index($a:$a, counta($a:$a))
由于A列有5个非空白单元格,包括一列标题,COUNTA返回5。 因此,INDEX返回$A$5,这是A列中最后使用的单元格(通常Index公式返回一个值,但引用操作符迫使它返回一个引用)。 由于我们将$A$2作为起点,公式的最终结果是范围$A$2:$A$5。
为了测试新创建的动态范围,你可以让COUNTA获取项目计数。
=COUNTA(项目)
如果所有操作都正确,一旦你向/从列表中添加或删除项目,公式的结果就会改变。
注意:上面讨论的两个公式产生的结果是一样的,但是你应该注意到性能上的差异。 OFFSET是一个不稳定的函数,每次对工作表的改变都会重新计算。 在强大的现代机器和合理大小的数据集上,这不应该是一个问题。 在低容量的机器和大数据集上,这可能使你的Excel变慢。 在这种情况下,你要最好使用INDEX公式来创建一个动态命名的范围。
如何在Excel中制作二维动态范围
要建立一个二维的命名范围,其中不仅行的数量,而且列的数量都是动态的,使用下面对INDEX COUNTA公式的修改。
第一个单元格 :index($1:$1048576, counta( 第一栏 ), COUNTA( 第一行 )))在这个公式中,你有两个COUNTA函数来获得最后的非空行和最后的非空列( 行数_num 和 列_num 分别是INDEX函数的参数)。 在 阵列 参数,你送入整个工作表(在Excel 2016 - 2007中为1048576行;在Excel 2003及以下版本中为65535行)。
现在,让我们为我们的数据集再定义一个动态范围:这个范围名为 销售 包括3个月(1月至3月)的销售数字,并在你向表格添加新的项目(行)或月份(列)时自动调整。
在B列第2行开始的销售数据中,公式的形状如下。
=$b$2:index(1:$1048576,counta($b:$b),counta(2:2))
为了确保你的动态范围能够正常工作,请在工作表的某个地方输入以下公式。
=SUM(sales)
=SUM(B2:D5)
正如你在下面的截图中所看到的,两个公式返回的总数是一样的。 区别体现在你向表中添加新条目的时候:第一个公式(有动态命名的范围)会自动更新,而第二个公式在每次变化时都必须手动更新。 这有很大的区别,嗯?
如何在Excel公式中使用动态命名范围
在本教程的前几节中,你已经看到了几个使用动态范围的简单公式。 现在,让我们试着想出一些更有意义的东西,显示Excel动态命名范围的真实价值。
在这个例子中,我们将采用经典的INDEX MATCH公式,在Excel中执行Vlookup。
INDEX ( 返回范围 , MATCH ( 查找_值 , 查找_范围 , 0))...看看我们如何通过使用动态命名范围使该公式更加强大。
如上面的截图所示,我们试图建立一个仪表盘,用户在H1中输入一个商品名称,在H2中获得该商品的总销售额。 我们为演示目的而创建的样本表只包含4个商品,但在你现实生活中的表可能有数百甚至数千行。 此外,新商品可能每天都在增加,所以使用引用并不是一种选项,因为你必须一次又一次地更新公式。 我太懒了! :)
为了迫使公式自动展开,我们将定义3个名称:2个动态范围和1个静态命名单元格。
Lookup_range: =$A$2:INDEX($A:$A, COUNTA($A:$A))
Return_range: =$E$2:INDEX($E:$E, COUNTA($E:$E))
Lookup_value: =$H$1
注意:Excel将把当前工作表的名称添加到所有的引用中,所以在创建名称之前,请确保打开带有源数据的工作表。
现在,开始在H1中输入公式。 当涉及到第一个参数时,输入你想使用的名称的几个字符,Excel将显示所有可用的匹配名称。 双击适当的名称,Excel将立即在公式中插入它。
完成后的公式看起来如下。
=INDEX(Return_range, MATCH(Lookup_value, Lookup_range, 0))
而且效果非常好!
只要你向表中添加新的记录,它们就会立即被纳入你的计算中,而你不必对公式做任何改动!而且,如果你需要将公式移植到另一个Excel文件中,只需在目标工作簿中创建相同的名称,复制/粘贴公式,就能立即得到工作。
提示:除了使公式更持久,动态范围在创建动态下拉列表时也很方便。
这就是在Excel中创建和使用动态命名范围的方法。 要想仔细了解本教程中讨论的公式,欢迎下载我们的Excel动态命名范围工作簿样本。 感谢您的阅读,希望下周能在我们的博客上见到您!