Table of contents
在本教程中,你会发现一些公式的例子,它们展示了INDEX在Excel中最有效的用途。
在所有Excel函数中,INDEX的威力经常被低估和利用不足,它肯定能排在前10名。 同时,这个函数很聪明,很灵活,用途也很广泛。
那么,什么是Excel中的INDEX函数呢? 从本质上讲,INDEX公式从一个给定的数组或范围内返回一个单元格引用。 换句话说,当你知道(或可以计算出)一个元素在一个范围内的位置,并且你想获得该元素的实际值时,你就会使用INDEX。
这听起来可能有点微不足道,但一旦你意识到INDEX函数的真正潜力,它可以对你在工作表中计算、分析和展示数据的方式做出关键性的改变。
Excel INDEX函数--语法和基本用途
在Excel中有两个版本的INDEX函数--数组形式和参考形式。 这两种形式都可以在Microsoft Excel 365-2003的所有版本中使用。
INDEX阵列形式
INDEX数组形式根据你指定的行号和列号,返回一个范围或数组中某个元素的值。
INDEX(array, row_num, [column_num])- 阵列 - 是一个单元格区域,命名的范围,或表格。
- 行数_num - 是数组中的行号,要从中返回一个值。 如果省略row_num,则需要column_num。
- 列_num - 是要返回一个值的列号。 如果省略了column_num,则需要使用row_num。
例如,该公式 =index(a1:d6, 4, 3)
返回 A1:D6 范围内第 4 行和第 3 列的交叉点的值,即单元格 C4 的值。
为了了解INDEX公式在真实数据上的作用,请看下面的例子。
与其在公式中输入行号和列号,你可以提供单元格参考,以获得一个更通用的公式。 =index($b$2:$d$6, g2, g1)
因此,这个INDEX公式返回的是正好在G2中指定的产品号(row_num)和G1单元格中输入的周数(column_num)相交的项目数。
提示:在数组参数中使用绝对引用($B$2:$D$6)而不是相对引用(B2:D6),可以使公式更容易复制到其他单元格。 另外,你可以将一个单元格转换为一个表格(Ctrl+T),并以表格名称引用它。
INDEX数组形式--需要记住的事情
- 如果数组参数只由一行或一列组成,你可以指定或不指定相应的row_num或column_num参数。
- 如果数组参数包括多于一行,并且row_num被省略或设置为0,则INDEX函数返回整个列的数组。 同样,如果数组包括多于一列,并且column_num参数被省略或设置为0,则INDEX公式返回整个行。 下面是一个演示这种行为的公式示例。
- row_num和column_num参数必须指向数组中的单元格,否则,INDEX公式将返回#REF!错误。
索引参考表
Excel INDEX函数的引用形式返回指定行和列的交叉点的单元格引用。
INDEX(reference, row_num, [column_num], [area_num] )- 参考 - 是一个或几个范围。
如果你要输入一个以上的范围,请用逗号隔开这些范围,并用括号括住参考参数,例如(A1:B5,D1:F5)。
如果引用中的每个范围只包含一个行或列,相应的row_num或column_num参数是可选的。
- 行数_num - 指的是要返回单元格引用的范围内的行号,它与数组形式类似。
- 列_num - 的列号来返回一个单元格引用,其工作原理也与数组形式类似。
- 面积_num - 一个可选的参数,指定使用参考参数中的哪个范围。 如果省略,INDEX公式将返回参考参数中列出的第一个范围的结果。
例如,该公式 =index((a2:d3, a5:d7), 3, 4, 2)
返回单元格 D7 的值,该单元格位于第二区域(A5:D7)的第 3 行和第 4 列的交叉点。
INDEX参考表格--需要记住的事项
- 如果row_num或column_num参数被设置为零(0),INDEX公式将分别返回整个列或行的引用。
- 如果同时省略了row_num和column_num,INDEX函数将返回area_num参数中指定的区域。
- 所有的_num参数(行_num、列_num和区域_num)都必须指向引用范围内的单元格;否则,INDEX公式将返回#REF!错误。
到目前为止,我们讨论的两个INDEX公式都非常简单,只是说明了这个概念。 你真正的公式可能要比这个复杂得多,所以让我们来探讨一下INDEX在Excel中的几个最有效的用途。
如何在Excel中使用INDEX函数--公式实例
也许Excel INDEX本身的实际用途并不多,但与其他函数(如MATCH或COUNTA)相结合,它可以做出非常强大的公式。
来源数据
我们所有的INDEX公式(除了最后一个),我们将使用以下数据。 为方便起见,它被组织在一个名为 源数据 .
使用表格或命名范围会使公式变长一些,但它也使公式明显更灵活,可读性更好。 要调整工作表的任何INDEX公式,你只需要修改一个名称,这完全弥补了公式长度的不足。
当然,如果你想的话,没有什么能阻止你使用通常的范围。 在这种情况下,你只需将表名改为 源数据 与适当的范围参考。
1.从列表中获取第N个项目
这是INDEX函数的基本用法,也是一个最简单的公式。 要从列表中获取某个项目,你只需编写 =INDEX(range, n)
其中 范围 是一个单元格区域或一个命名区域,而 n 是你想得到的项目的位置。
在处理Excel表格时,你可以用鼠标选择列,Excel会在公式中把列的名称和表格的名称一起拉出来。
要想获得某一行和某一列交汇处的单元格的值,你可以使用同样的方法,唯一不同的是你要同时指定--行号和列号。 事实上,在我们讨论INDEX数组形式时,你已经看到这样的公式在运行。
这里还有一个例子,在我们的示例表中,为了找到太阳系中第二大的行星,你可以通过以下方式对表格进行排序 直径 列,并使用以下INDEX公式。
=INDEX(SourceData, 2, 3)
阵列
是表名,或一个范围参考。 源数据 在这个例子中。行数(Row_num
是2,因为你要找的是列表中的第二个项目,它在第2个列号_编号
是3,因为 直径 是表格中的第3列。
如果你想返回行星的名称而不是直径,把column_num改为1。 当然,你可以在row_num和/或column_num参数中使用单元格引用,使你的公式更加通用,如下面的截图所示。
2.获取某行或某列的所有数值
除了检索单个单元格外,INDEX函数还能够返回一个数组的值,从 整行 或 栏目 要获得某一列的所有值,你必须省略row_num参数或将其设置为0。 同样,要获得整个行,你在column_num中传递空值或0。
这样的INDEX公式很难单独使用,因为Excel无法在一个单元格中容纳公式返回的数值数组,而你会得到#VALUE!的错误。 但是,如果你将INDEX与其他函数(如SUM或AVERAGE)结合使用,你会得到很棒的结果。
例如,你可以用下面的公式来计算太阳系的平均行星温度。
=AVERAGE(INDEX(SourceData, , 4))
在上述公式中,column_num参数是4,因为 温度 在我们的表中第4列中,省略了row_num参数。
以类似的方式,你可以找到最低和最高温度。
=MAX(INDEX(SourceData, , 4))
=MIN(INDEX(SourceData, , 4))
并计算出行星的总质量(质量是表中的第二列)。
=SUM(INDEX(SourceData, , 2))
从实用的角度来看,上述公式中的INDEX函数是多余的。 你可以简单地写成 =AVERAGE(范围)
或 =SUM(范围)
并得到同样的结果。
在处理真实数据时,作为你用于数据分析的更复杂公式的一部分,这一功能可能被证明是有帮助的。
3.将INDEX与其他函数(SUM, AVERAGE, MAX, MIN)一起使用
从前面的例子中,你可能会觉得INDEX公式会返回数值,但实际情况是,它返回一个 参考 这个例子展示了Excel INDEX函数的真正本质。
由于INDEX公式的结果是一个引用,我们可以在其他函数中使用它,使一个 动态范围 .听起来很混乱吗? 下面的公式会让一切变得清晰。
假设你有一个公式 =average(a1:a10)
返回A1:A10单元格中数值的平均值。 你可以用INDEX函数替换A1或A10,或者两者都替换,而不是直接在公式中写出范围,像这样。
=average(a1 : index(a1:a20,10))
上述两个公式都会得出相同的结果,因为INDEX函数也会返回对A10单元格的引用(row_num设置为10,col_num省略)。 不同的是,AVERAGE/INDEX公式的范围是动态的,一旦你改变INDEX中的row_num参数,AVERAGE函数处理的范围就会改变,公式会返回一个不同的结果。
显然,INDEX公式的路线显得过于复杂,但它确实有实际的应用,正如下面的例子所证明的。
例1.计算列表中前N项的平均值
假设你想知道我们系统中N个最大行星的平均直径。 因此,你按以下方式对表格进行排序 直径 列从大到小,并使用以下平均/指数公式。
=AVERAGE(C5 : INDEX(SourceData[Diameter], B1))
例2.指定的两个项目之间的总和
如果你想在你的公式中定义上界和下界项目,你只需要采用两个INDEX函数来返回你想要的第一个和最后一个项目。
例如,下面的公式返回在 直径 在单元格B1和B2中指定的两个项目之间的列。
=SUM(INDEX(SourceData[Diameter],B1) : INDEX(SourceData[Diameter], B2))
4.INDEX公式,创建动态范围和下拉列表
正如经常发生的那样,当你开始在工作表中组织数据时,你可能不知道你最终会有多少条目。 我们的行星表不是这种情况,它似乎是完整的,但谁知道...
总之,如果你在某一列中的项目数量不断变化,比如从A1到A n 你可能想创建一个动态的命名区域,包括所有有数据的单元格。 在这一点上,你想让这个区域在你添加新项目或删除一些现有项目时自动调整。 例如,如果你目前有10个项目,你的命名区域是A1:A10。 如果你添加一个新项目,命名区域自动扩展到A1:A11,如果你改变主意并删除新添加的数据。范围自动恢复到A1:A10。
这种方法的主要优点是,你不必不断地更新工作簿中的所有公式,以确保它们指的是正确的范围。
定义动态范围的一种方法是使用Excel的OFFSET函数。
=OFFSET(Sheet_Name! $A$1, 0, 0, COUNTA(Sheet_Name! $A:$A), 1)
另一个可能的解决方案是将Excel INDEX与COUNTA一起使用。
=Sheet_Name! $A$1:INDEX(Sheet_Name! $A:$A, COUNTA(Sheet_Name!$A:$A))
在这两个公式中,A1是包含列表中第一个项目的单元格,两个公式产生的动态范围将是相同的。
区别在于方法。 OFFSET函数从起点开始移动了一定数量的行和/或列,而INDEX则是在某一特定行和列的交叉点上找到一个单元格。 COUNTA函数,在两个公式中都使用,获得感兴趣的列中非空单元格的数量。
在这个例子中,A列有9个非空白单元格,所以COUNTA返回9。 因此,INDEX返回$A$9,这是A列中最后使用的单元格(通常INDEX返回一个值,但在这个公式中,引用操作符(:)迫使它返回一个引用)。 因为$A$1是我们的起点,公式的最终结果是$A$1:$A$9的范围。
下面的截图演示了如何使用这样的索引公式来创建一个动态的下拉列表。
提示:创建一个动态更新的下拉列表的最简单方法是基于一个表做一个命名的列表。 在这种情况下,你将不需要任何复杂的公式,因为Excel表本身就是动态范围。
你也可以使用INDEX函数来创建依赖性的下拉列表,下面的教程介绍了相关步骤:在Excel中制作一个层叠式下拉列表。
5.强大的Vlookups与INDEX / MATCH
执行垂直查找--这是INDEX函数真正闪光的地方。 如果你曾经尝试过使用Excel的VLOOKUP函数,你很清楚它有很多局限性,比如不能从查找列左边的列中提取数值,或者查找值有255个字符的限制。
INDEX / MATCH的联络方式在许多方面都优于VLOOKUP。
- 左边的Vlookups没有问题。
- 对查询值的大小没有限制。
- 不需要排序(具有近似匹配的VLOOKUP确实需要以升序对查询列进行排序)。
- 你可以自由地在表中插入和删除列,而不需要更新每个相关的公式。
- 最后但并非最不重要的是,INDEX / MATCH不会像多个Vlookups那样拖慢你的Excel。
你以下列方式使用INDEX / MATCH。
=INDEX ( 列中返回一个值,从 , (MATCH ( 查询值 , 列来进行查询 , 0))例如,如果我们翻转我们的源表,使之成为 星球名称 成为最右边的一列,INDEX/MATCH公式仍然可以顺利地从左边的一列中获取一个匹配的值。
更多提示和公式实例,请参见《Excel INDEX/MATCH》教程。
6.Excel INDEX公式从一个范围列表中获取1个范围
在Excel中,INDEX函数的另一个聪明而强大的用途是能够从一个范围的列表中获得一个范围。
假设你有几个列表,每个列表中有不同数量的项目,不管你信不信,你可以用一个公式计算任何选定范围内的平均值或总和。
首先,你为每个列表创建一个命名的范围;让它成为 行星D 和 月亮D 在这个例子中。
我希望上面的图片能解释这些范围名称背后的原因。 月亮 这张表还远远没有完成,在我们的太阳系中有176颗已知的自然卫星,仅木星目前就有63颗,而且还在不断增加。 在这个例子中,我随机挑选了11颗,嗯......也许不完全是随机的--有最美丽名字的卫星 :)
请原谅我的离题,回到我们的INDEX公式。 假设 行星D 是你的范围1和 月亮D 是范围2,单元格B1是你输入范围编号的地方,你可以使用下面的Index公式来计算所选命名范围内数值的平均值。
=AVERAGE(INDEX((PlanetsD, MoonsD), , , B1))
请注意,现在我们使用的是INDEX函数的参考形式,最后一个参数(area_num)中的数字告诉公式要选择哪个范围。
在下面的截图中, area_num (单元格B1)被设置为2,所以公式计算的平均直径为 月亮 因为该范围 月亮D 在参考参数中排在第二位。
如果你要处理多个列表,并且不想费力地记住相关的数字,你可以采用一个嵌套的IF函数来为你做这件事。
=AVERAGE(INDEX((PlanetsD, MoonsD), , , IF(B1="planets", 1, IF(B1="moons", 2)))))
在IF函数中,你使用了一些简单易记的列表名称,你希望你的用户在B1单元格中输入这些名称,而不是数字。 请记住这一点,为了使公式正确工作,B1中的文本应该与IF的参数完全相同(不区分大小写),否则你的索引公式将抛出#VALUE错误。
为了使公式更加方便用户使用,你可以使用数据验证来创建一个带有预定义名称的下拉列表,以防止拼写错误和错误打印。
最后,为了使你的INDEX公式绝对完美,你可以把它包围在IFERROR函数中,如果还没有选择,它将提示用户从下拉列表中选择一个项目。
=IFERROR(AVERAGE(INDEX((PlanetsD, MoonsD), , IF(B1="行星", 1, IF(B1="月亮", 2)))), "请选择列表!")
这就是你在Excel中使用INDEX公式的方法。 我希望这些例子向你展示了在你的工作表中利用INDEX函数的潜力的方法。 谢谢你的阅读!