Это хорошо работает в VBA, используя двойную замену, где R - диапазон Excel для отдельной ячейки:
ColumnLetter = Replace(Replace(R.AddressLocal(ReferenceStyle:=1), "$", vbNullString), R.Row, vbNullString)
Он основан на эквивалентной идее для использования на рабочем листе. В клеточной формуле используйте это, это еще короче:
=SUBSTITUTE(ADDRESS(1,COLUMN(M1),4),1,"")
Возвращает букву М и работает вплоть до столбца XFD. Ссылка на ячейку M1 может быть любым диапазоном в любом месте. Верхний левый столбец возвращается для диапазонов или нескольких ячеек.
Он получает АДРЕС первой ячейки в столбце, а затем удаляет завершающий 1, подставляя для него NullString. (4 в АДРЕСе гарантирует, что адрес будет возвращен как относительный адрес, т. Е. Один без и со знаком $).
Спасибо Барри Гудини , который отправил меня в поисках хорошего ответа на этот вопрос.