Please Note: This article is written for users of the following Microsoft Excel versions: 2007, 2010, 2013, 2016, 2019, Excel in Microsoft 365, and 2021. If you are using an earlier version (Excel 2003 or earlier), this tip may not work for you. For a version of this tip written specifically for earlier versions of Excel, click here: Relative Worksheet References when Copying.
Written by Allen Wyatt (last updated November 18, 2024)
This tip applies to Excel 2007, 2010, 2013, 2016, 2019, Excel in Microsoft 365, and 2021
When you copy a formula from one cell to another, Excel automatically updates any relative references within the formula based on the target that is receiving the formula. For instance, assume that cell B7 contains the following formula:
=B6+A7
If you copy this formula to cell D22, Excel automatically updates the references, so they are relative to cell D22, as shown here:
=D21+C22
When you are copying formulas from one worksheet to another, and the formula contains a reference to a previous worksheet, Excel doesn't do this type of formula updating—at least not on the worksheet names. For instance, let's say you have three worksheets named January, February, and March—in that order. On the February worksheet you have the following formula:
=January!B7*1.075
If you copy this cell to the March worksheet, Excel will automatically change the B7 reference (if necessary), but it won't change the sheet name (January, which was "one less" than the sheet on which the formula first occurred) to the adjusted relative sheet name (February, which is "one less" than the sheet to which the formula is being copied).
If you have only a few worksheet references in your copied formulas, it is fairly easy to just edit the formulas, so they reference the proper worksheet. The task can quickly become a nightmare, however, if you have dozens or hundreds of such references.
The solution is to do a simple search-and-replace operation in Excel, as outlined here:
Figure 1. The Replace tab of the Find and Replace dialog box.
The formulas in the worksheet are now updated so they refer to the proper worksheet.
Notice in steps 4 and 5 that what you are searching for and replacing it with is not the straight month names. This is done because the month names alone (January, February, etc.) could easily occur in other places in the worksheet without being part of a formula. You don't want to change these instances, so the extra characters are included to help narrow down the search.
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (9869) applies to Microsoft Excel 2007, 2010, 2013, 2016, 2019, Excel in Microsoft 365, and 2021. You can find a version of this tip for the older menu interface of Excel here: Relative Worksheet References when Copying.
Create Custom Apps with VBA! Discover how to extend the capabilities of Office 2013 (Word, Excel, PowerPoint, Outlook, and Access) with VBA programming, using it for writing macros, automating Office applications, and creating custom applications. Check out Mastering VBA for Office 2013 today!
If you have added subtotals to your worksheet data, you might want to copy those subtotals somewhere else. This is easy ...
Discover MoreWhen you click on a cell, you expect the cell to be selected. What happens, though, if you are instead taken to an ...
Discover MoreNeed to change some cell references in your defined names? Changing one or two is easy; changing dozens is a good deal ...
Discover MoreFREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
2024-11-23 15:54:17
J. Woolley
My Excel Toolbox includes the following function to return a sheet's name using its location:
=NameOfSheet([Position], [Absolute])
Position is the location of the sheet in the workbook or 0 (default). If Absolute is FALSE (default), Position is relative to the formula's worksheet; therefore, NameOfSheet(-1) refers to the sheet on the left. If Absolute is TRUE, Position is the absolute location of the sheet in the workbook (base-1); therefore, NameOfSheet(3, TRUE) refers to the 3rd sheet. Absolute is ignored if Position is 0 (the formula's worksheet). Chart sheets and worksheets plus hidden and very hidden sheets are included when determining location.
Replacing the Tip's example
=January!B7*1.075
with this formula
=INDIRECT(NameOfSheet(-1)&"!B7")*1.075
makes it relative to the previous month's sheet on the left. Notice the 1st formula will adjust if rows or columns are inserted or deleted before B7 on sheet January, but the 2nd formula will not.
My Excel Toolbox also includes the following function to return a range on any worksheet in the workbook:
=RangeOnSheet(Target, [Position], [Absolute])
Position and Absolute are described above. The result is the range specified by Target on the Sheet determined by Position and Absolute (Sheet!Target). Sheet must be a worksheet; otherwise, Sheet!Target will be invalid. If Target refers to a single cell, the value of that cell is returned; otherwise, the result is an array of values.
Replacing the Tip's example
=January!B7*1.075
with this formula
=RangeOnSheet(B7, -1)*1.075
makes it relative to the previous month's sheet on the left. As before, the 2nd formula will not adjust if rows or columns are inserted or deleted before B7 on sheet January. But in this case, the 2nd formula will correct itself if equivalent changes are made to its sheet. On the other hand, the following formula will automatically adjust to changes made on sheet January (only):
=RangeOnSheet(January!B7, -1)*1.075
Target must refer to a cell range. Only the range applies; Target's worksheet is ignored.
The following function in My Excel Toolbox returns the address of Range as text:
=RangeAddress(Range, [RowAbsolute], [ColumnAbsolute],
[ReferenceStyle], [External], [RelativeTo])
This function's five optional arguments are defined in Excel VBA's description of its Range.Address property. By replacing Range with RangeOnSheet(...), the latter's result can be verified. For example, consider these formulas in sheet February of Book1.xlsx:
=RangeAddress(RangeOnSheet(B7, -1))
=RangeAddress(RangeOnSheet(January!B7, -1))
Each formula returns '[Book1.xlsx]January'!$B$7. But if a row is added above row 7 in sheet February, the 1st formula returns '[Book1.xlsx]January'!$B$8. And if a row is added above row 7 in sheet January, the 2nd formula returns '[Book1.xlsx]January'!$B$8.
NameOfSheet is Volatile, so it will update if a sheet's name is changed. RangeOnSheet and RangeAddress are not Volatile, but any function will update if its parameter is changed.
See https://sites.google.com/view/MyExcelToolbox/
Got a version of Excel that uses the ribbon interface (Excel 2007 or later)? This site is for you! If you use an earlier version of Excel, visit our ExcelTips site focusing on the menu interface.
FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
Copyright © 2024 Sharon Parq Associates, Inc.
Comments