函数名称还需要取地址吗_利用公式引用区域 上篇indirect函数

一、问题:动态引用一个区域

说到Excel公式,它的灵活性往往来自参数的灵活性,也就是说,在公式中,我们不写死参数,而是用公式计算参数的值并将结果作为另一个公式的参数。这样,我们就能很方便地调整参数,进而使用同一个公式尽可能适用更多的情况。

通过函数计算出具体的数值来作为另一个公式参数的比较简单,也非常常见。更进一步地,Excel中也可以是通过函数计算出一片区域来作为另一个公式的参数。这样做的好处主要是提高公式的泛用性,用尽量少的公式处理各种问题。比如:

  1. 希望vlookup函数能动态调整引用的数据表,即vlookup函数的第二个参数,我们希望可以是动态的。

  2. 希望能根据不同的条件引用一片数据表中不同的区域,并计算其值。

以上两个功能需要我们向公式提供一个可以变化的对某一片区域的引用。以第一条需求为例:我们现在同时有10张报表分别存放在Sheet1~Sheet10中,我们现在需要使用vlookup函数随时查看某张报表中一个条数据的某个字段。如果我们在vlookup(查找值,数据区域,列号,查找模式)中给出确定的数据区域,那么或者我们每次手工修改数据区域参数,或者一次列出10个公式,分别查找10张报表中的(也需要手工修改数据区域),稍微有一点麻烦。

在公式中动态引用一片区域,可以使用这样两个函数:

  • indirect

  • offset

本篇我们介绍indirect函数。下篇我们介绍offset函数。

二、indirect函数

indirect函数是间接引用函数。它可以接收一个表示单元格(如“E8”)或者区域地址(如”E8:F9”,”Sheet1!$A$1:$C$500”)的文本字符串。并且返回对单元或地址字符串指向区域的引用。或者,简单一些,接收一个表示地址的字符串,返回对地址的引用)。例如一个求A1单元格到A5单元格数据总和的函数:

=sum(A1:A5)

这里A1:A5表示一个地址,Excel将会把这个地址视作对相关单元格的引用,取A1:A5单元格的数值并进行sum函数的计算。同理,以下公式也是成立的:

=sum(indirect(“A1:A5”))

Excel计算结果如下图所示:

7b09808d4db811177a1c0b76bc738096.png

从公式内容看,我们很容易理解为什么它是间接引用:它先接收一个表示地址的字符串(”A1:A5”,注意,Excel中加了双引号的是字符串),再将这个字符串解析(或者说翻译)成真真正正的地址,即A1:A5(注意,这里没有了双引号),并将其返回给其他公式使用。相对于直接的引用它多了接收字符串和字符串解析的步骤。

作为对比,我们看这样两个会导致错误的两个公式:

  • =sum(“A1:A5”),公式中给出了一个以字符串表示的地址,Excel是无法使用的,因此会返回#VALUE!错误。

  • =sum(indirect(A1:A5)),indirect没有接收以字符串表示的地址,无法完成地址转换,相当于sum函数没有得到有效的地址,整体返回#REF!错误。

根据indirect的这个功能,我们就可以实现本文开篇中提出的动态引用数据区域的功能。

三、Indirect函数动态引用区域

使用indirect函数,再配合上一个小技巧,我们可以实现动态引用区域,这个技巧就是对区域命名。

在Excel中,选定一片区域后,可以在公式编辑栏左侧的名称编辑栏中录入一个名称,此后可以通过名称来定向到被命名的区域。如下图:

11073ccab3826995a0fb7aab491a6c60.png

也可以通过菜单栏中的名称选项来命名区域:在公式选项卡=>定义的名称栏目中可以找到相关命令:

8ac75001966800b73d3fb1d9853f335c.png

具体的操作方法如下:

41046397e5e37b9819f290850713ea2b.gif

将一片区域命名后,可以直接在vlookup函数的第二个参数,即数据区域中,录入名称,实现引用对应的区域。此时,我们只能手工输入名称,相当于写死了这个参数,尚不能通过公式计算的方式动态引用这个区域。那么,我们怎么实现呢?利用indirect函数:我们在一个单元格中录入名称,indirect函数引用这个单元格后就可以间接引用名称对应的区域了。例如,请看下方的工作表示意图,黄、绿、蓝色区域分别被命名为“区域1”,“区域2”和“区域3”,对于同样的主键,其值在三个区域中的值不同。我们想要通过一个vlookup函数提取不同区域中主键为“A”的数据记录所对应的值。

fe8e2a8becd4b08ed35eb4385525dff0.png

公式如下图所示:

66be6ffdd7fee52c5c3f27aeba82bf1a.png

可以看到,通过indirect引用一个存放了名称的单元格,我们可以将区域作为公式的计算结果提供给vlookup函数,这样,我们就能动态地改变vlookup函数引用的数据区域。

在下篇中,我们继续介绍offset函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值