2009-04-09 2 views
12

Есть ли способ отображения имени ячейки определенной ячейки в другой ячейке? Я хотел бы отобразить имя ячейки в соседней ячейке, чтобы пользователь мог идентифицировать имя ячейки, не нажимая ее.Извлечение имени ячейки в Excel

Благодаря ...

ответ

0

Это не представляется возможным, что это странно. Вы можете подумать, что функция cell() должна предоставить способ получить имя, но это не так. Облом.

+0

Что, если имя ссылается на диапазон? Или формула (OFFSET, скажем), которая иногда включала ячейку, но иногда нет? Я думаю, что MS просто объявила проблему «слишком тяжелой» и занялась чем-то более простым. ;-) –

+0

Хорошая точка ... Думаю, я ожидаю получить имя, которое «покрывает» ячейку, если ячейка находится в именованном диапазоне. Конечно, могут быть другие функции, которые помогут решить любые такие проблемы, я удивлен, что нет. – unwind

+0

Я подозреваю, что это одна из тех областей, где 80% не знают об этой функции и о тех, кто это делает, только 20% помощи. Поэтому нет никакого давления на решение. Намного лучше перепроектировать интерфейс. –

0

Это будет работать в очень основные обстоятельства:

Public Function CellName(cel As Range) As Variant 
Dim nm As Name 
    For Each nm In Names 
     If nm.RefersTo = "=" & cel.Parent.Name & "!" & cel.Address Then 
      CellName = nm.Name 
      Exit Function 
     End If 
    Next 
    CellName = CVErr(xlErrNA) 
End Function 

Это не будет работать, если ячейка является частью именованного диапазона, он не будет отображаться несколько имен для ячейки, он не будет работать для ячеек, включенных в именованные формулы (например, =OFFSET() диапазонов).

"=" & cel.Parent.Name & "!" & cel.Address 

вещь довольно неуклюжим, тоже. Может быть лучший способ сделать чек. Создание объекта Range из RefersTo и использование Intersect() может работать.

0

Excel имеет функцию «Cell()», из которой вы можете получить определенные свойства.

Вы можете использовать = Cell ("row", K9) и получить номер строки 9, и есть эквивалентный параметр "col", но он возвращает номер столбца (11), а не букву.

6

Эта функция даст имя NamedRange относится ячейка:

Public Function CellName(oCell As Range) As Variant 
Dim oName As Name 
For Each oName In ThisWorkbook.Names 
    If oName.RefersToRange.Parent Is oCell.Parent Then 
     If Not Intersect(oCell, oName.RefersToRange) Is Nothing Then 
      CellName = oName.Name 
      Exit Function 
     End If 
    End If 
Next 
CellName = CVErr(xlErrNA) 
End Function 

Он перебирает все имена в книге, а затем для каждого имени он проверяет, если он относится к любым вещам в этом входной параметр листа от. Если это тогда, то он проверяет, пересекаются ли входная ячейка и ярости, на которые ссылается имя. Если они это сделают, это возвращает название диапазона.

+1

Поскольку я использую вашу функцию и ссылаюсь на [мой вопрос] (http://stackoverflow.com/questions/16604855/why-does-not-field-with-custom-function-to-get-name-recallculate), это может быть полезно добавить 'Application.Volatile' сразу после объявления функции. – Voitcus

+0

Я вообще не знал об этой настройке .. Учусь за день! – Adarsha

5

ADDRESS(ROW(),COLUMN()) предоставит вам адрес, например. $ A $ 1 текущей ячейки. Добавьте/вычитайте из значений строки/столбца (числа) ссылку на ячейку, которую вы используете.

Если вы не хотите $, то вы можете найти и заменить его SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$","") и получить только A1, например

+0

Удивительно, что то, что я искал +1 – gsharp

1

Я взял некоторые «советы» от ответа выше от АДАРША. Я получил аналогичный результат с приведенным ниже кодом, с этим циклом и несколькими уточнениями. Однако мои макросы «tip for excel» должны сделать ваш отладчик вашим лучшим другом.

' 
Functionname_of(clls) 
' 
    name_of = "" 
' 
    Dim nam As String 
    Dim rg As Range 
    Set rg = clls 
' 
    nam = rg.Name.Name 
' 
    name_of = nam 
' 
End Function 'name_of 
' 

Немного терпения и настойчивости, дал мне именно то, что я искал - определенной пользователем функции, чтобы дать мне определенное имя ячейки. Что произойдет, если одна и та же ячейка имеет более одного имени? Попробуйте это и посмотрите. Это простой тест, поэтому я хочу оставить это для вас, чтобы экспериментировать, учиться и передавать новые знания.

Наслаждайтесь ... W

+0

Я разочарован. Кажется, что это работает ТОЛЬКО, когда у ячейки есть - имя определено. Кажется, единственный надежный способ сделать это - отсканировать все имена и вернуть первое или последнее совпадение. – will

1

ActiveWorkbook.Sheets.Item (1) .Cells (строка, столбец) .Name.Name

0

Ссылки именованных ячейки в другой ячейке, E12 в этом случае, и затем используйте эту формулу: = "'" & FORMULATEXT (E12).Это ставит перед собой апостроф, чтобы он отображал имя или формулу в виде текста.

0

Вы можете поместить курсор в пустую ячейку, затем введите = и щелкните по названной ячейке. Он отобразит содержимое ячейки. Затем вы измените формат ячейки на текст, и она отобразит =

4

В Excel 2013 и, возможно, в некоторых более старых версиях ADDRESS() принимает третий параметр, определяющий формат адреса, который будет возвращен с следующие значения:

1 - Абсолют (по умолчанию)

2 - Абсолютная строка/столбец относительной

3 - относительная строка/столбец абсолютного

4 - Относительный

так что позволяет сказать, в ячейке A1

ADDRESS(ROW();COLUMN()) //outputs $A$1 
ADDRESS(ROW();COLUMN();1) //outputs $A$1 
ADDRESS(ROW();COLUMN();2) //outputs A$1 
ADDRESS(ROW();COLUMN();3) //outputs $A1 
ADDRESS(ROW();COLUMN();4) //outputs A1 

Если вы хотите, чтобы отобразить имя ячейки D3 в типе клеток A1:

ADDERSS(ROW(D3);COLUMN(D3);4) //outputs text D3 in cell A1 
0

Технически, вы могли бы сочетать в себе ПОДСТАВИТЬ() и новый FORMULATEXT() выполняет это, если вы не возражаете добавить скрытый столбец на своем листе.

Предположим ячейку А1 назван FOO Добавить простую опорную формулу в B1 до названной ячейки = FOO Добавить формулу в С1 = ПОДСТАВИТЬ (FORMULATEXT (В2), «=», «») Скрыть Колонка B

Ячейка C1 будет содержать значение FOO (или ссылку RC для неназванных клеток)

Регулировка по мере необходимости, ваш пробег (или kilometerage) может изменяться.

Смежные вопросы