Как получить имя текущего столбца в Excel?
Как получить номер текущей строки и имя текущего столбца для ячейки в Excel?
Как получить номер текущей строки и имя текущего столбца для ячейки в Excel?
Попробуйте следующую функцию:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
Пояснение: ADDRESS(row_num, column_num, [abs_num])
. [abs_num] = 4
= относительный адрес. Это означает, что в возвращаемом значении нет ‘$. Для столбца 'AB’, ADDRESS
вернет ‘AB1’. Замена удаляет ‘1’.
Для этого можно использовать функции ROW
и COLUMN
. Если вы опустите аргумент для этих формул, будет использована текущая ячейка. Они могут быть непосредственно использованы с функцией OFFSET
, или любой другой функцией, где вы можете указать и строку, и столбец в качестве числовых значений.
Например, если вы вводите =ROW()
в ячейку D8, возвращаемое значение будет 8. Если вы вводите =COLUMN()
в той же ячейке, возвращаемое значение будет 4.
Если вы хотите, чтобы буква столбца была буквой, вы можете использовать функцию CHAR
. Я не рекомендую использовать буквы для представления столбца, т.к. при переходе в двубуквенные имена столбцов (где просто использование чисел более логично в любом случае) возникают сложности.
Независимо от того, если вы все же хотите получить букву столбца, вы можете просто добавить 64 к номеру столбца (64 - это на один символ меньше, чем A
), поэтому в предыдущем примере, если вы установите значение ячейки в =CHAR(COLUMN()+64)
, возвращаемое значение будет D
. Если бы вы хотели, чтобы значение ячейки было адресом самой ячейки, то полная формула была бы =CHAR(COLUMN()+64) & ROW()
.
Just a FYI, я получил 64 из ASCII таблицы. Также можно использовать формулу CODE
, так что обновленная формула, использующая ее, будет =CHAR(COLUMN() + CODE("A") - 1)
. Вам нужно вычесть 1, так как минимальное значение COLUMN
всегда равно 1, и тогда минимальное возвращаемое значение всей формулы будет B
.
Однако, это не будет работать с двубуквенными столбцами. В этом случае для правильного разбора двухбуквенных столбцов нужна следующая формула:
=IF(COLUMN()>26,IF(RIGHT(CHAR(IF(MOD(COLUMN()-1,26)=0,1,MOD(COLUMN()-1,26))+64),1)="Y",CHAR(INT((COLUMN()-1)/26)+64) & "Z",CHAR(INT((COLUMN()-1)/26)+64) & CHAR(IF(MOD(COLUMN(),26)=0,1,MOD(COLUMN(),26))+64)),CHAR(COLUMN()+64))&ROW()
Я не уверен, есть ли более простой способ сделать это или нет, но я знаю, что работает от ячейки A1
до ZZ99
без проблем. Однако, это показывает, почему лучше избегать использования буквенных идентификаторов столбцов и придерживаться формул, основанных на чистоте чисел (например, использовать номер столбца вместо буквы с OFFSET
).
Попробуйте этот
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
Это дает вам точный заголовок колонки, без каких-либо $ и т.д..
Чуть-чуть вручную, но с меньшим количеством VBA и более простой формулой:
=column()
=Address(1,A1)
Это даст результат $A$1
После копирования значений найдите и замените $
и 1
на пустые.
Для получения названия столбца я использовал следующие формулы.
Для конкретной ячейки:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
Для текущей ячейки:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
Попробуйте эту вариацию. Она работает на 3-буквенных столбцах и не оставляет “$” на переднем конце:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
```.
Введите это в любую ячейку:
Español :
=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)
English :
=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)
Вы можете заменить столбец() на номер строки.
Другой возможный способ - использовать нечто подобное:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
Где colid
ссылается на диапазон named, который вы создадите в другом месте рабочей книги, состоящей из двух соседних столбцов с несколькими строками: первая колонка, содержащая номера с 1 по n, соответствующие номеру COLUMN()
, вторая, содержащая буквы A - ZZ, или сколько угодно ссылок на столбцы, которые вы захотите вписать в книгу. Символ ROW()
можно оставить как =MySheet1!A1
и вернуть номер строки.
Так что, если скопировать вышеуказанную строку в ячейку A1 ‘MySheet2’, она будет оценена как MySheet1
и вернет значение, найденное в соответствующей ячейке MySheet1
.
Это позволит вам, например, использовать MySheet2
в качестве рабочей области, удалять и вставлять новые данные, в то время как любое форматирование или вычисления в &007, которые ссылаются на это содержимое, будут продолжать корректно работать с новыми наборами данных из целевого рабочего листа с закладками.
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)
Формула адреса работает, возвращая столбец и имя строки. Возвращаемый формат всегда будет $(Column Letters)$(Row Numbers)
- например, $AA$2
или $XAA$243556
Если мы знаем, что $ всегда будет в первом знаке, мы можем использовать первую формулу середины, чтобы начать вытягивать символы после первого знака $ (т.е. 2-го знака).
Затем мы находим следующий знак $ (как мы знаем, их будет только два) и знаем, сколько символов между первым и вторым знаком доллара находится между первым и вторым знаком. Остальное - простое вычитание.
Вот VBA, определяемая пользователем формула, решение. Она работает с 1, 2, и 3 буквенными столбцами.
Положите следующее в кодовый модуль:
Function COLUMNLETTER(Optional rng As Range) As String
'Returns the Column Letter of the top left cell in rng.
If rng Is Nothing Then Set rng = Application.Caller
COLUMNLETTER = Left(rng.Address(0, 0), IIf(rng.Column > 26, IIf(rng.Column > 702, 3, 2), 1))
End Function
=COLUMNLETTER() в любую ячейку вернёт букву столбца ячейки. =COLUMNLETTER(B3) в любую ячейку вернётся B.
Эта функция, определяемая пользователем, отлично работает при создании общих формул внутри функции INDIRECT.
Следующая формула работает независимо от того, куда вы ее положили (она вернет вам имя колонки).
=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")