Excel利用INDIRECT函数以及数组公式实现查询

 时间:2024-09-21 22:38:22

在Excel的使用过程中,尤其是制作某些Excel计算表格的时候,当涉及到需要通过已知参数查表得到其他参数值的时候,一般情况下只能人工查询然后输入到Excel内。本文以暖通噪声计算书为例,通过INDIRECT函数以及数组公式的结合,实现Excel内建数据表的查询功能,使工作真正变得智能化

工具/原料

MicrosoftExcel

方法/步骤

1、现有Excel计算书,需要根据“倍频带中心频率”,查询“直管的气流噪声的修正值”,如图。那么需要在图1的F5单元格输入公式,查询的范围是图2的表。这里设定图2所示的表所在的工作表名称为“数据表”,方便引用。

Excel利用INDIRECT函数以及数组公式实现查询

Excel利用INDIRECT函数以及数组公式实现查询

2、首先,考虑使用INDIRECT函数,INDIRECT函数可以定位单元格,只需要给出单元格的行号和列号,函数的格式为=INDIRECT("r"&m&"c"&n,FALSE)这里的r表示行(ROW),c表示列(COLUMN),m为我们需要确定的行号,n为我们需要确定的列号,&用于连接字符串,"r"&m&"c"&n是定位单元格的固定格式。于是我们的重心就转移到表示m和n了。

3、首先确定m,也就是要确定我们要找的数据在哪一行。很明显,对于这个具体的问题,行号是确定的,为“数据表”的第9行,因此直接用9替换m就好了

4、之后我们来确定n,这是本公式的重点。n的确定思路是,将我们输入的频率值(E5单元格)与“数据表”第8行列出的各个频率值(数据表!B8:I8)逐一比较,并筛选出比输入频率大的给定频率值,之后取其中最小的一个值的列号,此列号减一即为我们需要的列号。当然,此处默认的选择原则是,频率大于a但小于b的时候,取a的修正值。

5、数组公式就派上用场了,我们用=MIN(IF(E5<数据表!B8:I8,COLUMN(数据表!B8:I8),""))-1来描述上面的思路。首先,最里面的IF函数,会判断E5与数据表!B8:I8各单元格值的大小,并返回满足小于号条件的单元格的列号,比方我们输入的频率是280,那么IF函数会返回5,6,7,8,9这样一个序列,经过MIN函数的筛选,我们得到了最小的5,减一之后就得到了我们要找的列号4。

6、当然,仅仅这样还不能称之为数组公式,不在墙绅褡孛数组公式中的IF函数是没有办法执行多次比较的。所以,我们先瓴烊椹舟将m和n的表达式替换到INDIRECT函数中,得到了如下的式子:=INDIRECT("r"&9&"c"&(MIN(IF(E5<数据表!B8:I8,COLUMN(数据表!B8:I8),""))-1),FALSE)写完之后,同时按下Ctrl+Shift+Enter生成数组公式,表现为公式两边出现花括号,注意,此花括号不能自己输进去,那样是没有效果的哦

7、这样,一个简单的Excel查询就做好了,只要在E5单元格输入已知的频率,就能在F5单元格自动得到要求的修正值,相当的智能哦

8、当然,我们还可以在这个函数的基础上做出一些优化,比如当“数据表”的顶部新增了一行的时候,m的值是固定值9,而不是引用,就无法满足查询要求了,只能手动去修改,因此我们可以对m的值写一段函数来处理

9、对于m,由于表头和数据之间的位置关系不太可能变动,我尺攵跋赈们可以利用表头信息来定位,即“直管道气流噪声倍频带修正值”这段文字的行号加2即可,我们用下面的公式处理:=ROW(INDEX(数据表!改怊眶峋$A:$A,MATCH("直管道气流噪声倍频带修正值",数据表!$A:$A,0)))+2或者直接用"修正值(dB)"这个名称来定位,更加直观准确:=ROW(INDEX(数据表!$A:$A,MATCH("修正值(dB)",数据表!$A:$A,0)))

10、解释一下:MATCH函数用于返回指定值在依宏氽墓指定数组区域中的位置,格式为:=MATCH(lookup_value,造婷用痃lookup_array,match_type)比方这里的MATCH("修正值(dB)",数据表!$A:$A,0)就是在数据表!$A:$A中,查找"修正值(dB)"这段文字在数据表!$A:$A中的位置,即从上到下第几个,注意这个返回的值不是真正意义的行号哦,只是在数据表!$A:$A中的相对行号INDEX函数根据位置返回区域中的值或对值的引用,格式为:INDEX(array,row_num,column_num)这里由于是单列,所以只需要给出一个行序列就可以了,正好就是MATCH函数的结果ROW函数用于返回具体某个单元格在整个工作表中的绝对行号于是最终就返回了我要查询行号了

11、这样,我们用上面的任海潍吨燹意一个公式替换m,即便“数据表”增加行,或者做一些不影响表结构的操作,也不会影响到公式的正确查询,得到的公式为:=INDIRECT(&quo墉掠载牿t;r"&ROW(INDEX(数据表!$A:$A,MATCH("修正值(dB)",数据表!$A:$A,0)))&"c"&(MIN(IF(E5<数据表!B8:I8,COLUMN(数据表!B8:I8),""))-1),FALSE)

12、公式太长不便于理解和修改,我们可以将m和n的计算公式放在其他任意两个单元格中完成,INDIRECT函数只需要引用这两个单元格就可以了,这就保证了公式的可读性。

13、其他可优化的地方就请自行探索了!!!!

使用VBA判断并填充颜色 Excel VBA取消全部隐藏的工作表? VbA,选中单元格,给单元格加上边框 excel中使用vba提取所有工作薄名称的方法 怎样使用VBA制作百叶窗效果的欢迎画面?
热门搜索
歪歪漫画网首页 滑冰图片 亚洲图片专区 杉原杏璃图片 屏幕图片