Excel index函数与match函数的配合应用,多条件返回值

| | Comments (1)



因为自己是个兼职站长的人,平时在公司有整理一些资料,所以excel也是自己经常用的办公工具,当然经常会碰到一些问题需要新的方法来解决,这个过程学习excel也就必须了,总归会把学到的excel新的知识点分享出来,那么今天就简单介绍下Excel 的index函数。

根据excel固有的帮助,我们可以了解到index函数有两种形式:

1.数组形式,其写法为INDEX(array,row_num,column_num)

参数的解释:

Array   为单元格区域或数组常量。

  • 如果数组只包含一行或一列,则相对应的参数 row_num 或 column_num 为可选参数。

  • 如果数组有多行和多列,但只使用 row_num 或 column_num,函数 INDEX 返回数组中的整行或整列,且返回值也为数组。

Row_num   数组中某行的行号,函数从该行返回数值。如果省略 row_num,则必须有 column_num。

Column_num   数组中某列的列标,函数从该列返回数值。如果省略 column_num,则必须有 row_num。


2.引用形式,其写法INDEX(reference,row_num,column_num,area_num)

返回指定的行与列交叉处的单元格引用。如果引用由不连续的选定区域组成,可以选择某一选定区域。


Reference   对一个或多个单元格区域的引用。

  • 如果为引用输入一个不连续的区域,必须将其用括号括起来。

  • 如果引用中的每个区域只包含一行或一列,则相应的参数 row_num 或 column_num 分别为可选项。例如,对于单行的引用,可以使用函数 INDEX(reference,,column_num)。

Row_num   引用中某行的行号,函数从该行返回一个引用。

Column_num   引用中某列的列标,函数从该列返回一个引用。

Area_num   选择引用中的一个区域,返回该区域中 row_num 和 column_num 的交叉区域。选中或输入的第一个区域序号为 1,第二个为 2,以此类推。如果省略 area_num,则函数 INDEX 使用区域 1。

Reference的写法:(A1:B4,D1:E4,G1:H4),则 area_num 1 为区域 A1:B4,area_num 2 为区域 D1:E4,而 area_num 3 为区域 G1:H4。

两种形式的原理一直,却别在第二种格式在确定位置时多一个最后的参数,取值在哪个区域。当然一般是以,1,2,3确定哪个行数、列数、区域数,条件您知道这个位置,然而很多情况,这个位置是不确定,需要根据条件来判断出正确的位置,这个类似于excel多条件求和excel多条件统计,而这个是索引或成为返回正确的值。

最经常的运用是index函数与match函数的混搭配合法,以达到解决的效果。

示例:

INDEX函数与MATCH函数联用:

MATCH函数是返回在指定方式下与指定数值匹配的数组中元素的相应位置。

               公式:MATCH(LOOKUP_VALUE,LOOKUP_ARRAY,MATCH_TYPE)

                         LOOKUP_VALUE为在数据表中查找的数值

                         LOOKUP_ARRAY为包括要查找的连续单元格区域

                         MATCH-TYPE为数字1,0,-1

原理就用match函数来确定满足条件的行数或列数,结合后公式INDEX(array,MATCH(LOOKUP_VALUE,LOOKUP_ARRAY,MATCH_TYPE),MATCH(LOOKUP_VALUE2,LOOKUP_ARRAY2,MATCH_TYPE))

当然还有更为复杂的运用,比如需要返回满足条件的单号:
=INDEX([原料状况.xls]请购_DATA!$L$3:$L$2963,MATCH(IF(V773="集港",SUMPRODUCT(LARGE(([原料状况.xls]请购_DATA!$Y$3:$Y$2963=AL773)*([原料状况.xls]请购_DATA!$Q$3:$Q$2963>=(W773-10))*[原料状况.xls]请购_DATA!$Q$3:$Q$2963,ROW($1:$1))),IF(V773="在途",SUMPRODUCT(LARGE(([原料状况.xls]请购_DATA!$Y$3:$Y$2963=AL773)*([原料状况.xls]请购_DATA!$R$3:$R$2963>=(W773-10))*[原料状况.xls]请购_DATA!$R$3:$R$2963,ROW($1:$1))),IF(V773="已采未产",SUMPRODUCT(LARGE(([原料状况.xls]请购_DATA!$Y$3:$Y$2963=AL773)*([原料状况.xls]请购_DATA!$T$3:$T$2963>=(W773-10))*[原料状况.xls]请购_DATA!$T$3:$T$2963,ROW($1:$1))),"无采购单号")))&AL773,IF(V773="集港",[原料状况.xls]请购_DATA!$Q$3:$Q$2963,IF(V773="在途",[原料状况.xls]请购_DATA!$R$3:$R$2963,IF(V773="已采未产",[原料状况.xls]请购_DATA!$T$3:$T$2963,"error")))&[原料状况.xls]请购_DATA!$Y$3:$Y$2963,0),1)

根据单号和另外一些条件来正确显示时间:

=IF(OR(V772="",ISERROR(Z772)),"",INDEX([原料状况.xls]请购_DATA!$Z:$AB,MATCH(IF(AA772=FALSE,IF(ISNUMBER(Y772)=TRUE,Y772,LEFT(Y772,14)),IF(ISNUMBER(Z772)=TRUE,Z772,LEFT(Z772,14)))&AL772,[原料状况.xls]请购_DATA!$L:$L&[原料状况.xls]请购_DATA!$Y:$Y,0),MATCH(V772,[原料状况.xls]请购_DATA!$Z$2:$AB$2,0)))

这些是自己的一些运用,然而看似复杂的公式其实都是一些类似的衍生,只要了解原理,至于如何配合其他一些函数那就是您的事情了,因为在设定函数的过程,总归会出现一些难以预料的情况,所以还要加上一些判断来纠正显示的结果,让结果更接近正确,需要注意的是,运用index函数必须注意以下的各条说明内容。


相关重要说明

  • 如果同时使用参数 row_num 和 column_num,函数 INDEX 返回 row_num 和 column_num 交叉处的单元格中的值。
  • 如果将 row_num 或 column_num 设置为 0,函数 INDEX 则分别返回整个列或行的数组数值。若要使用以数组形式返回的值,请将 INDEX 函数以>数组公式 (数组公式:数组公式对一组或多组值执行多重计算,并返回一个或多个结果。数组公式括于大括号 ({ }) 中。按 Ctrl+Shift+Enter 可以输入数组公式。)形式输入,对于行以水平单元格区域的形式输入,对于列以垂直单元格区域的形式输入。若要输入数组公式,请按 Ctrl+Shift+Enter。
  • Row_num 和 column_num 必须指向数组中的一个单元格;否则,函数 INDEX 返回错误值 #REF!。

单点日志:http://spoint.babyshoot.cn

1 Comments

match表示要过来报到一下。

Leave a comment

Archives

Ads by google

Pages

Powered by Movable Type 4.24-en

About this Entry

This page contains a single entry by 单点日志 published on May 19, 2011 1:22 PM.

北野武 之 极恶非道 アウトレイジ was the previous entry in this blog.

中国互联网如何管理是中国的事 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.