Яка функція отримати номер поточного рядка та поточну назву стовпця для комірки в Excel?
OFFSET
функцію спільно з або замість INDIRECT
формули в цьому випадку. Якщо ви хочете використовувати рядки, я також оновив свою відповідь.
Яка функція отримати номер поточного рядка та поточну назву стовпця для комірки в Excel?
OFFSET
функцію спільно з або замість INDIRECT
формули в цьому випадку. Якщо ви хочете використовувати рядки, я також оновив свою відповідь.
Відповіді:
Ви можете використовувати для цього 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
).
OFFSET
замість цього, що дозволяє вказувати стовпці як числа. Незалежно від того, я оновив відповідь формулою, щоб розширити її на роботу з двобуквенними стовпцями.
However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Спробуйте виконати наступну функцію:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
Пояснення: ADDRESS(row_num, column_num, [abs_num])
. [abs_num] = 4
= відносна адреса. Це означає, що у поверненому значенні немає '$'. Для стовпця "AB" ADDRESS
повернеться "AB1". Замінник видаліть "1".
Спробуйте це
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
Це дає точний заголовок стовпця, без будь-якого $ тощо
Введіть це в будь-яку клітинку:
Еспаньол :
=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)
Ви можете замінити стовпчик () на номер рядка.
Для отримання назви стовпців я використав наступні формули.
Для конкретної комірки:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
Для поточної комірки:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
Спробуйте цю варіацію. Він працює на 3-х літерних стовпцях і не залишає "$" на передній частині:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
Іншим можливим способом було б використовувати щось подібне:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
Де colid
посилається на названий діапазон, який ви створили б в іншому місці робочої книги, що складається з двох сусідніх стовпців з декількома рядками: перший стовпець, що містить цифри від 1 до n, що відповідає COLUMN()
номеру, другий містить букви A - ZZ, або скільки б не було посилань на вас бажання розмістити. ROW()
Прекрасно залишити як є , щоб повернути номер рядка.
Отже, якщо ви скопіювали вищезазначений рядок у комірку A1 "MySheet2", вона буде оцінена як =MySheet1!A1
та поверне значення, знайдене у відповідній комірці MySheet1
.
Це дасть змогу, наприклад, використовувати MySheet1
як робочу область, видаляти та повторно вставляти нові дані, тоді як будь-яке форматування чи обчислення, MySheet2
що стосуються цього вмісту, продовжуватимуть правильно працювати з новими наборами даних на робочому аркуші на вкладці цілі.
Ось 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.
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)
Формула адреси працює, повертаючи ім’я стовпця та рядка. Повертається формат завжди буде $(Column Letters)$(Row Numbers)
- наприклад, $AA$2
або$XAA$243556
Якщо ми знаємо, що $ завжди буде виникати при першому символі, ми можемо використовувати першу формулу середини, щоб почати тягнути символи після першого знака $ (тобто 2-го символу).
Тоді ми знаходимо наступний знак $ (оскільки ми знаємо, що їх буде лише два) і знаємо, скільки символів між першим і другим знаком долара. Решта - просте віднімання.
спробуйте це:
= ЯКЩО (COLUMN ()> 26, CHAR (COLUMN () / 26 +64), "") & CHAR (MOD (COLUMN () - 1,26) +65) & ROW ()
ця функція діє до "ZY1" або стовпця = 701
LIN
і ,COL
але проблема в тому , що вони повертають числа, і мені потрібно лист колонки доINDIRECT
нього.