Here's the best I've found so far:

=SUBSTITUTE(ADDRESS(1,( **COLUMN() + 1** ),4),1,"")

The part in the middle marked in bold is the only part that changes.

In this example, it's taking the current column and adding 1, so returning `B`

if it's in column `A`

and `AA`

if it's in column `Z`

.

## Example variants

Example adding to a fixed column (adding 2 to column Z, returns "AB"):

=SUBSTITUTE(ADDRESS(1,( **COLUMN(Z1) + 2** ),4),1,"")

Example reading a cell `A1`

that contains a letter as text to be treated as a column letter:

=SUBSTITUTE(ADDRESS(1,( **COLUMN( INDIRECT(A1&1) ) + 1** ),4),1,"")

Example reading a cell `A1`

that contains a *number* to be treated as a column *number* (e.g. if it contains 25, it'll return AB):

=SUBSTITUTE(ADDRESS(1,( **COLUMN( INDIRECT(A1&1) ) + 1** ),4),1,"")

## Looking up cells with `indirect()`

If your goal is to **look up a cell**, e.g. using `indirect()`

, you can skip the `substitute()`

and just pipe in the row number. For example, if you want to look up the cell to the right of the current cell (so increasing the cell letter by one and keeping the row the same):

=INDIRECT( ADDRESS( ROW(), ( COLUMN() + 1 ),4) )

Based partly on this which has a handy formula for transposing to get a column of column letters, incremented each row.