今天在CSDN的回答栏目看到一个问题:Excel如何根据两列条件查找另一张表的行和列?

使用preparedStatement查找数据 利用index和match查找出_index

  如这个例子中呈现的,右表是三种水果国产/进口的单价,左表前两列分别对应的是水果的名称和进口/国产类型,想请问左表的空格中写怎样的函数可以实现根据前两列条件分别查找右表的行和列呢?

  答案是利用Excel中的index函数与match函数结合来完成。

使用preparedStatement查找数据 利用index和match查找出_excel_02

  单元格中的函数D3:

=INDEX(H2:K4,MATCH(B3,H2:K2,0),MATCH(C3,H2:H4,0))

  具体的做法是利用index函数,确定查找范围,结合match函数先确定行号再确定列号。

  1、Index函数的语法

  INDEX(array, row_num, [column_num])
  INDEX( 取值范围 ,第几行 , 第几列)

  (1)、INDEX 函数返回表格或区域中的值或值的引用。
  (2)、当函数 INDEX 的第一个参数为数组常量时,使用数组形式。
  (3)、array[必填],为单元格区域或数组常量。如果数组只包含一行或一列,则相对应的参数row_num或column_num为可选。如果数组有多行和多列,但只使用row_num或column_num,函数INDEX返回数组中的整行或整列,且返回值也为数组。
  (4)、row_num[必填],数组中某行的行序号,函数从该行返回数值。如果省略row_num,则必须有column_num。
  (5)、column_num[选填],数组中某列的列序号,函数从该列返回数值。如果省略column_num,则必须有row_num。
  (6)、注意是先行号,然后是列号,别弄反了!
  (7)、如果同时使用row_num和column_num,函数INDEX返回row_num和column_num交叉处的单元格的数值。
  (8)、如果将row_num或column_num设置为 0(零),函数 INDEX 则分别返回整个列或行的数组数值。若要使用以数组形式返回的值,请将 INDEX 函数以数组公式形式输入,对于行以水平单元格区域的形式输入,对于列以垂直单元格区域的形式输入。若要输入数组公式,请按 Ctrl+Shift+Enter。
  (9)、row_num和column_num必须指向array中的某一单元格;否则,函数INDEX返回错误值#REF!。

  2、match函数的语法

  MATCH(lookup_value, lookup_array, [match_type])
  (1)、lookup_value:表示你要查找的数值;
  (2)、lookup_array:表示你要查找的范围;
  (3)、[match_type]:可选参数,数值-1、0、1三个参数;(如果不填写默认是1)
  (4)、1表示会查找小于或等于“lookup_value”的最大值;
  (5)、0表示会查找等于“lookup_value”的第一个值;
  (6)、-1表示会查找大于或等于“lookup_value”的最小值;

  这样的查找不限定于同一个sheet,还可以在不同的sheet以及不同的文件来查找,通常情况下,我们是通过写VBA脚本来实现的,有了这两个函数的结合使用,可以提高查找效率。