下图所示的工作表中,我们要求水果的销售额,很显然,使用列B中的单价乘以列C中的销量即得到销售额。因此,要得到苹果的销售额,就在单元格D2中输入公式:
下图所示的工作表中,我们要求水果的销售额,很显然,使用列B中的单价乘以列C中的销量即得到销售额。因此,要得到苹果的销售额,就在单元格D2中输入公式:
=B2*C2
同理,要得到其他水果的销售额,就在列D中相应的单元格输入列B乘以列C单元格的公式。如果数据很多,这样一个一个输入将费时费力。实际上,在单元格D2中输入公式后,我们可以拖动复制该单元格公式至下方所有要计算的单元格,快速计算出结果,如下图所示。
Excel会自动调整,让公式使用正确的单元格,从而得到我们想要的结果。
上面的操作,是我们在Excel中经常会进行的操作,通过在一个单元格中输入公式,然后拖动公式到指定的单元格,自动获得想要的结果,非常方便快捷。
为什么能够这样呢?
其实,这些看似轻松平常的操作背后,蕴藏着Excel的相对引用原理。
回到上面的例子,再看看单元格D2中的公式,表面上看,表示单元格B2的值乘以单元格C3的值,但实际上应该是“本单元格左侧第2个单元格的值乘以左侧第1个单元格的值”。公式向下复制后,虽然单元格变了,但表示的意思仍然是本单元格左侧第2个单元格的值与左侧第1个单元格的值相乘。
也就是说,我们看到的只是表象。在使用相对引用时,Excel是以相对于输入单元格的位置来处理单元格地址的。这就是Excel的相对引用原理。
理解相对引用原理非常重要,它是理解Excel公式运算以及在名称、数据有效性和条件格式等应用的基础。下面再举一个例子。
如下图所示的工作表,在单元格C5中输入公式:
=A1+200
表面上看,是求单元格A1中的值加上200后的结果,而实际上Excel认为是将基于当前单元格向上4行向左2列的单元格的值加上200。
拖动单元格C5复制公式至单元格C6,结果如下图所示,基于当前单元格C6,相关单元格相应地调整为单元格A2。
将单元格C5复制到单元格E7,此时公式变为:
=C3+200
即,公式中相关的单元格调整为基于当前单元格E7向上移4行向左移2列的单元格C3,如下图所示。
上述操作也表明,相对引用是Excel默认使用的引用方式。因此,要结合工作表实际要求来正确使用。如果不正确的使用相对引用,有时会得到错误的结果。
如下图所示的工作表,交税金额为工资总额乘以税率。我们先在单元格B1中输入公式:=A2*D2,然后向下拖至单元格B5,显然除B2中的值正确外,其它单元格中的值都是错误的。
这是因为按照Excel默认的相对引用方式,会自动调整相关单元格,特别是列D中的单元格,如下图所示。列D中的单元格除D2外,都为空,因此除单元格B2外,其它单元格的值为0。
然而,我们需要的是列A中的单元格随当前单元格的位置改变而自动调整,但列D中的单元格永远固定在单元格D2。此时,就需要运用单元格的绝对引用,如下图所示。
在单元格B2中输入公式:
=A2*$D$2
向下拖动复制公式至单元格B5,得到正确的结果。
在上面的公式中,$D$2是绝对引用,不会随着单元格自动调整。
当我们需要一直使用某单元格或者单元格区域时,就应该使用绝对引用。
当然,还可以使用混合引用,例如D$2表明行不变而列可以变化,$D2表明列不变而行可以变化。
例如下图所示的工作表,我们要计算3种不同税率下的交税金额。在单元格B5中输入公式:
=$A5*A$2
向下拖动至单元格B8,向右拖动至列D。绝对引用的行或者列不变,而使用相对应用的行或者列将自动调整获取正确的单元格数据。
示例1:在条件格式中的相对引用
如下图所示的工作表,要求对分数小于60的单元格背景色设置为红色。使用公式:
=$B2<60
列固定而行随着单元格调整。
注:条件格式中使用的公式中的单元格引用,是基于公式中所选单元格区域左上角的引对引用。
示例2:在数据有效性中的相对引用
与条件格式一样,在设置数据有效性的公式中包含的单元格引用,也是其于所选区域左上角单元格的相对引用。
如下图所示的工作表,我们在列A中设置了数据有效性,使得用户在列A中不能输入重复数据。
其中,使用了公式:
=COUNTIF(A:A,A1)=1
当我们选择列A中任一单元格时,公式会自动调整到当前单元格,如下图所示。
注意到,公式中使用的A:A也是相对引用,因此可以很容易地将列A中的不允许输入重复值的功能复制应用到其他列。
示例3:在名称中的相对引用
选择工作表单元格A1,在“新建名称”对话框中定义名称GetRightCellValue:
=Sheet7!B1
即获取当前单元格右侧单元格中的值。
定义名称后,在工作表中输入该名称时,会获取所在单元格右侧单元格中的值,如下图所示。
如果想要该名称在工作簿其他工作表中也可使用,那么可以将该名称修改如下:
=!B1