Як отримати поточну назву стовпця в Excel?


30

Яка функція отримати номер поточного рядка та поточну назву стовпця для комірки в Excel?


1
Я тільки що дізнався , функцію LINі , COLале проблема в тому , що вони повертають числа, і мені потрібно лист колонки до INDIRECTнього.
Jader Dias

2
ви можете використовувати OFFSETфункцію спільно з або замість INDIRECTформули в цьому випадку. Якщо ви хочете використовувати рядки, я також оновив свою відповідь.
Прорив

До речі, INDIRECT є летючою функцією, тому використовуйте її економно. Це здається, що я OFFSET може бути кращим вибором тут, якщо ви базуєте потрібну посилання на деякий розрахунок позиції.
АдамВ

Відповіді:


33

Ви можете використовувати для цього ROWі COLUMNфункції. Якщо ви опустите аргумент для цих формул, використовується поточна комірка. Вони можуть бути використані безпосередньо з в OFFSETфункції , або будь-який інший функції , де ви можете вказати , як рядки і стовпці в вигляді числових значень.

Наприклад, якщо ви вводите =ROW()в комірку D8, повернене значення дорівнює 8. Якщо ви вводите =COLUMN()в ту саму клітинку, повернене значення дорівнює 4.

Якщо ви хочете написати стовпець, ви можете скористатися CHARфункцією. Я не рекомендую використовувати букви для представлення стовпця, оскільки речі стають складними при переході в назви стовпчиків з двома літерами (у будь-якому випадку просто використання цифр більш логічно).

Незалежно від того, якщо ви все-таки хочете отримати літеру стовпця, ви можете просто додати 64 до номера стовпця (64 на один символ менше A), тому в попередньому прикладі, якщо ви встановите значення комірки, значення =CHAR(COLUMN()+64), яке повертається, буде D. Якби ви хотіли, щоб значенням комірки було саме розташування комірки, повна формула була б =CHAR(COLUMN()+64) & ROW().


Просто 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).


Він працюватиме лише для перших 26 стовпців. Але це зробить.
Jader Dias

1
@Jader Dias, тому я рекомендую використовувати OFFSETзамість цього, що дозволяє вказувати стовпці як числа. Незалежно від того, я оновив відповідь формулою, щоб розширити її на роботу з двобуквенними стовпцями.
Прорив

2
Я не знаю, чому ця відповідь отримала стільки голосів, коли відповідь Скота набагато краща, за винятком того, що він не пояснив її. Не потрібна складна формула. Я додав коментар, щоб пояснити, чому / як це працює.
Герхард Пауелл

Це працює, поки ви не перейдете до AA тощо, тоді він не працюватиме.
честь krystan

@krystanhonour використовую останню формулу з моєї відповіді в такому випадку ...However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Прорив

34

Спробуйте виконати наступну функцію:

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

Пояснення: ADDRESS(row_num, column_num, [abs_num]). [abs_num] = 4= відносна адреса. Це означає, що у поверненому значенні немає '$'. Для стовпця "AB" ADDRESSповернеться "AB1". Замінник видаліть "1".



2

Введіть це в будь-яку клітинку:

Еспаньол :

=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)

Англійська :

=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)

Ви можете замінити стовпчик () на номер рядка.


2

Для отримання назви стовпців я використав наступні формули.

Для конкретної комірки:

=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")

Для поточної комірки:

=SUBSTITUTE(CELL("address"),"$" & ROW(),"")

Спробуйте цю варіацію. Він працює на 3-х літерних стовпцях і не залишає "$" на передній частині:

=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")

2

Трохи вручну, але менше VBA та простіша формула:

  • У рядку Excel, наприклад клітинку A1, введіть номер стовпця =column()
  • У рядок нижче введіть =Address(1,A1)
  • Це забезпечить результат $A$1

Після того, як значення скопійовано, знайдіть і замініть $і 1з порожнім.


2

Це також спрацює

=MID(CELL("address"),2,FIND("$",CELL("address"),2)-2)

Чи можете ви додати до цього якесь пояснення.
ChrisF

1

Іншим можливим способом було б використовувати щось подібне:

=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())

Де colidпосилається на названий діапазон, який ви створили б в іншому місці робочої книги, що складається з двох сусідніх стовпців з декількома рядками: перший стовпець, що містить цифри від 1 до n, що відповідає COLUMN()номеру, другий містить букви A - ZZ, або скільки б не було посилань на вас бажання розмістити. ROW()Прекрасно залишити як є , щоб повернути номер рядка.

Отже, якщо ви скопіювали вищезазначений рядок у комірку A1 "MySheet2", вона буде оцінена як =MySheet1!A1та поверне значення, знайдене у відповідній комірці MySheet1.

Це дасть змогу, наприклад, використовувати MySheet1як робочу область, видаляти та повторно вставляти нові дані, тоді як будь-яке форматування чи обчислення, MySheet2що стосуються цього вмісту, продовжуватимуть правильно працювати з новими наборами даних на робочому аркуші на вкладці цілі.


1

Рішення для польської версії Excel:

  • для певної комірки:
=PODSTAW(PODSTAW(KOMÓRKA("adres";B1);"$" & WIERSZ();""); "$"; "")
  • для поточної комірки:
=PODSTAW(PODSTAW(KOMÓRKA("adres");"$" & WIERSZ();""); "$"; "")

0

Ось 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 (В3) в будь-якій клітині буде повертати B .

Ця визначена користувачем функція чудово працює при створенні загальних формул всередині функції INDIRECT.


0
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)

Формула адреси працює, повертаючи ім’я стовпця та рядка. Повертається формат завжди буде $(Column Letters)$(Row Numbers)- наприклад, $AA$2або$XAA$243556

Якщо ми знаємо, що $ завжди буде виникати при першому символі, ми можемо використовувати першу формулу середини, щоб почати тягнути символи після першого знака $ (тобто 2-го символу).

Тоді ми знаходимо наступний знак $ (оскільки ми знаємо, що їх буде лише два) і знаємо, скільки символів між першим і другим знаком долара. Решта - просте віднімання.


0

Ось як можна знайти заголовок стовпця (тобто букву):

=RIGHT(LEFT(ADDRESS(1,COLUMN()),LEN(ADDRESS(1,COLUMN()))-2),LEN(ADDRESS(1,COLUMN()))-3)

0

спробуйте це:

=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)

0

Наступна формула працює незалежно від того, де ви її вкладете (вона поверне вам назву стовпця).

=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")

-1

спробуйте це:

= ЯКЩО (COLUMN ()> 26, CHAR (COLUMN () / 26 +64), "") & CHAR (MOD (COLUMN () - 1,26) +65) & ROW ()

ця функція діє до "ZY1" або стовпця = 701


4
Розгорніть цю відповідь, пояснивши, що це за функції.
Кевін Панько

отримати поточне ім'я стовпця в Excel, наприклад, "A1", "В1", ... навіть до таких , як "Аа1", "Ba1", "CA1", ...
Ayus

-1
=IF(COLUMN()>702,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),4),3),IF(COLUMN()>26,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),3),2),RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),2),1)))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.