假设您有一个包含三个工作表Sheet1,Sheet2和Sheet3的工作簿。在工作表Sheet2的A1列中,您具有公式= Sheet1!A1。当您将该公式从Sheet2复制到Sheet3的单元格A1时,该公式仍引用Sheet1。怎么可能呢? Excel为什么不像单元格引用那样调整工作表引用?

与命名范围一样,Excel将工作表名称视为绝对名称。每个工作表对象都独立于工作簿中的所有其他工作表。

当您粘贴包含工作表引用的公式时,该工作表引用的粘贴内容将保持不变。

您可以做几件事。一种是在粘贴公式引用后对其进行简单修改,以使其引用正确的图纸。如果要更改很多,则可以选择目标工作表中的所有公式(F5 | Special | Formulas),然后使用“查找和替换”替换原始工作表名称(Sheet1)

具有正确的工作表名称(Sheet2)。

如果您的引用需求并不复杂,则可以使用宏方法。例如,如果您希望特定单元格中的公式引用当前工作表之前的工作表中的单元格,则可以通过宏相当容易地做到这一点。请考虑以下宏:

Function PrevSheet(rCell As Range)

Application.Volatile     Dim i As Integer     i = rCell.Cells(1).Parent.Index     PrevSheet = Sheets(i - 1).Range(rCell.Address)

End Function

宏查看当前工作表,然后找出在它之前的工作表。然后对该工作表进行参考。

创建PrevSheet宏后,可以在单元格中使用该函数的一种方法:

=PrevSheet(A1)

这将返回上一个工作表中单元格A1的值。如果您有Sheet1,Sheet2和Sheet3,并在Sheet3上使用此公式,则它将返回Sheet2!A1的值。如果上一张纸是工作簿的第一张纸,或者它不是工作表,则该函数将返回#Value错误。

如果以后将此公式复制到其他工作表(例如工作表5),则它将相对于其新位置拉出值,这意味着它将从Sheet4!A1中拉出值。

您还可以包括工作表名称,该功能将正常工作:

=PrevSheet(Sheet3!A5)

此版本将始终返回Sheet2!A5,因为sheet2是Sheet3的前一张纸。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(12141)适用于Microsoft Excel 2007、2010、2013和2016。您可以在此处为Excel的较旧菜单界面找到此技巧的版本:

链接:/ excel-Relative_Worksheet_References [相对工作表参考]。