Useful Data Tips

OFFSET Function in Excel

⏱️ 28 sec read 📊 Excel

OFFSET returns a reference to a range that's offset from a starting cell. It creates dynamic ranges that adjust automatically—perfect for growing datasets and rolling calculations.

OFFSET Syntax

=OFFSET(reference, rows, cols, [height], [width])

reference: Starting point
rows: Rows to move (+ down, - up)
cols: Columns to move (+ right, - left)
height: Number of rows in result (optional)
width: Number of columns in result (optional)

Basic Examples

Move from A1

=OFFSET(A1, 2, 3)
// Returns cell D3 (2 rows down, 3 columns right)

=OFFSET(A1, -1, 0)
// Returns cell A0 (error - can't go above row 1)

=OFFSET(A1, 0, 1)
// Returns cell B1 (same row, 1 column right)

Return a Range

=SUM(OFFSET(A1, 0, 0, 5, 1))
// Sum A1:A5 (starting at A1, 5 rows tall, 1 column wide)

=AVERAGE(OFFSET(B2, 0, 0, 10, 1))
// Average B2:B11 (10 cells starting at B2)

Dynamic Range with COUNTA

Problem: Data grows, need SUM to adjust automatically

=SUM(OFFSET(A2, 0, 0, COUNTA(A:A)-1, 1))

Explanation:
- Start at A2 (skip header)
- Don't move (0 rows, 0 cols)
- Height = count of non-empty cells minus header
- Width = 1 column

Automatically includes new data!

Last N Values (Rolling Sum)

Last 7 Days Sales

=SUM(OFFSET(A2, COUNTA(A:A)-8, 0, 7, 1))

Explanation:
- Start at A2
- Move to last value minus 7 (rolling window)
- Take 7 rows
- Always sums last 7 entries

Last 12 Months Average

=AVERAGE(OFFSET(B2, COUNTA(B:B)-13, 0, 12, 1))

Updates automatically as new months are added

Dynamic Chart Range

Create Named Range for Chart:
Name: ChartData
Refers to: =OFFSET(Sheet1!$A$2, 0, 0, COUNTA(Sheet1!$A:$A)-1, 1)

Use ChartData as chart source
Chart updates automatically with new data!

Dependent Dropdown Lists

Regions in Column A, Cities in columns B, C, D

Cell E1: Region (dropdown from A2:A4)

Cell E2 validation:
=OFFSET($A$1, 1, MATCH($E$1, $A$1:$Z$1, 0)-1,
        COUNTA(OFFSET($A$1, 1, MATCH($E$1, $A$1:$Z$1, 0)-1, 100, 1)), 1)

Shows only cities for selected region

Combining OFFSET with Other Functions

With MATCH (Find and Extract)

=OFFSET(A1, MATCH("John", A:A, 0)-1, 1)

Find "John" in column A, return value from column B

With INDEX (Alternative to VLOOKUP)

=INDEX(OFFSET(A1, 0, 0, 10, 5), 3, 2)

Get value from row 3, column 2 of a 10x5 range

Practical Use Cases

Running Total (Last N Days)

Cell: D10
=SUM(OFFSET(D10, -6, 0, 7, 1))

Sums current cell plus 6 cells above (7-day total)

Moving Average

=AVERAGE(OFFSET(A1, ROW()-6, 0, 5, 1))

5-period moving average that updates each row

Dynamic Header for Reports

="Last Updated: " & TEXT(OFFSET(A:A, COUNTA(A:A)-1, 0), "mm/dd/yyyy")

Shows date from last row of data

OFFSET vs INDEX/MATCH

OFFSET INDEX/MATCH
Volatile (recalculates always) Non-volatile (faster)
Dynamic ranges Static lookups
Can be slower Better performance
Great for charts Great for lookups

When to Use OFFSET

Pro Tip: OFFSET is volatile and recalculates every time the worksheet changes. For better performance with large datasets, consider using Excel Tables or INDEX/MATCH instead.

← Back to Excel Tips