Ссылка Excel на текущую ячейку - PullRequest
59 голосов
/ 16 апреля 2009

Как получить ссылку на текущую ячейку?

Например, если я хочу отобразить ширину столбца A, я мог бы использовать следующее:

=CELL("width", A2)

Однако я хочу, чтобы формула была примерно такой:

=CELL("width", THIS_CELL)

Ответы [ 11 ]

34 голосов
/ 13 августа 2014

Слишком поздно на несколько лет:

Просто для полноты хочу дать еще один ответ:

Сначала перейдите к Параметры Excel -> Формулы и включите Ссылки R1C1 . Тогда используйте

  =CELL("width", RC)

RC всегда ссылается на текущую строку, текущий столбец, то есть на «эту ячейку».

Решение Рика Тичи по сути является твиком, позволяющим сделать то же самое в стиле ссылки A1 (см. Также комментарий GSerg к ответу Джои и примечание его комментарий к ответу Патрика Макдональда).

Приветствия
: -)

32 голосов
/ 08 марта 2014

Создать именованную формулу под названием THIS_CELL

  1. В текущем листе выберите ячейку A1 (это важно!)
  2. Открыть Name Manager (Ctl + F3)
  3. Нажмите New...
  4. Введите "THIS_CELL" (или просто "THIS", что мне больше нравится) в Name:
  5. Введите следующую формулу в Refers to:

    =!A1

    ПРИМЕЧАНИЕ: Убедитесь, что ячейка A1 выбрана . Эта формула относится к ActiveCell.

  6. Под Scope: выберите Workbook.

  7. Нажмите OK и закройте Name Manager

Используйте формулу в рабочем листе точно так, как вы хотели

=CELL("width",THIS_CELL)

РЕДАКТИРОВАТЬ: Лучшее решение, чем использовать INDIRECT()

Стоит отметить, что решение, которое я дал, должно быть предпочтительнее любого решения, использующего функцию INDIRECT(), по двум причинам:

  1. Он энергонезависимый, в то время как INDIRECT() является энергозависимой функцией Excel и, как следствие, значительно замедлит вычисление рабочей книги, если он используется много.
  2. Это намного проще и не требует преобразования адреса (в форме ROW() COLUMN()) в ссылку на диапазон к адресу и снова обратно в ссылку на диапазон.

РЕДАКТИРОВАТЬ: Также см. этот вопрос для получения дополнительной информации о именованных диапазонах, зависящих от листа.

РЕДАКТИРОВАТЬ: Также см. @ imix's answer ниже для изменения этой идеи (используя ссылки в стиле RC). В этом случае вы можете использовать =!RC для THIS_CELL именованной формулы диапазона или просто использовать RC напрямую.

31 голосов
/ 16 апреля 2009

Вы можете использовать

=CELL("width", INDIRECT(ADDRESS(ROW(), COLUMN())))
26 голосов
/ 11 апреля 2012

=ADDRESS(ROW(),COLUMN(),4) даст нам относительный адрес текущей ячейки. =INDIRECT(ADDRESS(ROW(),COLUMN()-1,4)) даст нам содержимое ячейки слева от текущей ячейки =INDIRECT(ADDRESS(ROW()-1,COLUMN(),4)) даст нам содержимое ячейки над текущей ячейкой (отлично подходит для вычисления промежуточных итогов)

Использование функции CELL () возвращает информацию о последней ячейке, которая была изменена. Поэтому, если мы введем новую строку или столбец, ссылка CELL () будет затронута и больше не будет текущей ячейкой.

7 голосов
/ 16 апреля 2009

A2 уже является относительной ссылкой и изменится при перемещении ячейки или копировании формулы.

5 голосов
/ 02 июля 2014

Без опосредованного (): =CELL("width", OFFSET($A$1,ROW()-1,COLUMN()-1) )

4 голосов
/ 28 декабря 2013
=ADDRESS(ROW(),COLUMN())
=ADDRESS(ROW(),COLUMN(),1)
=ADDRESS(ROW(),COLUMN(),2)
=ADDRESS(ROW(),COLUMN(),3)
=ADDRESS(ROW(),COLUMN(),4)
1 голос
/ 27 июня 2014

Существует лучший способ, который безопаснее и не замедлит работу вашего приложения. Как настроен Excel, ячейка может иметь значение или формулу; формула не может ссылаться на собственную ячейку. В итоге вы получите бесконечный цикл, поскольку новое значение приведет к другому вычислению .... Используйте вспомогательный столбец, чтобы вычислить значение на основе того, что вы положили в другую ячейку. Например:

Столбец A является истинным или ложным, столбец B содержит денежное значение, а столбец C содержит следующую формулу: = B1

Теперь, чтобы вычислить, что столбец B будет выделен желтым в условном формате, только если столбец A равен True, а столбец B больше нуля ...

= И (А1 = Правда, С1> 0)

Затем вы можете скрыть столбец C

.
1 голос
/ 28 июня 2013

Я нашел лучший способ справиться с этим (для меня), это использовать следующее:

Dim MyString as String
MyString = Application.ThisCell.Address
Range(MyString).Select

Надеюсь, это поможет.

1 голос
/ 20 декабря 2011

Внутри таблиц вы можете использовать [@], который (к сожалению) Excel автоматически расширяется до Table1[@], но он работает. (Я использую Excel 2010)

Например, если есть два столбца [Change] и [Balance], поместите это в столбец [Balance]:

=OFFSET([@], -1, 0) + [Change]

Обратите внимание, конечно, что это зависит от порядка строк (как и большинство других решений), поэтому оно немного хрупкое.

...