Подтвердить что ты не робот

Самосознание для ячейки, столбца и строки в функциях листа

В функции рабочего листа в Excel, как вы ссылаетесь на ячейку, столбец или строку, в которой вы находитесь?

Обратите внимание, что это чрезвычайно полезно для условного форматирования.

4b9b3361

Ответ 1

где F13 - ячейка, которую вы должны ссылаться:

=CELL("Row",F13)  yields 13; its row number

=CELL("Col",F13)  yields 6; its column number;  

=SUBSTITUTE(ADDRESS(1,COLUMN(F13)*1,4),"1","") yields F; its column letter

Ответ 2

Для самой ячейки для саморекламы:

INDIRECT(ADDRESS(ROW(), COLUMN()))

Чтобы ячейка могла самостоятельно ссылаться на свой столбец:

INDIRECT(ADDRESS(1,COLUMN()) & ":" & ADDRESS(65536, COLUMN()))

Чтобы ячейка могла самостоятельно ссылаться на свою строку:

INDIRECT(ADDRESS(ROW(),1) & ":" & ADDRESS(ROW(),256))
or
INDIRECT("A" & ROW() & ":IV" & ROW())

Числа указаны для 2003 и ранее, используйте столбец: XFD и строку: 1048576 для 2007 +.

Примечание. Функция INDIRECT нестабильна и должна использоваться только при необходимости.

Ответ 3

Я не вижу необходимости в косвенном, особенно для условного форматирования.

Самый простой способ самосогласования ячейки, строки или столбца - относиться к ней обычно, например, "= A1" в ячейке A1, и сделать ссылку частично или полностью относительной. Например, в условной форматирующей формуле для проверки наличия в первом столбце строк различных ячеек введите следующее с выделенным A1 и скопируйте при необходимости. Условное форматирование всегда будет ссылаться на столбец А для строки каждой ячейки:

= $A1 <> ""

Ответ 4

Для нелетучего решения, как насчет в 2007 +:

for cell    =INDEX($A$1:$XFC$1048576,ROW(),COLUMN())
for column  =INDEX($A$1:$XFC$1048576,0,COLUMN())
for row     =INDEX($A$1:$XFC$1048576,ROW(),0)

У меня есть странная ошибка в Excel 2010, где она не примет самую последнюю строку или столбец для этой формулы (строка 1048576 и столбец XFD), поэтому вам может понадобиться ссылаться на эти короткие. Не уверен, что то же самое для любых других версий так ценит обратную связь и редактирование.

и за 2003 год (INDEX стал нестабильным в '97):

for cell    =INDEX($A$1:$IV$65536,ROW(),COLUMN())
for column  =INDEX($A$1:$IV$65536,0,COLUMN())
for row     =INDEX($A$1:$IV$65536,ROW(),0)

Ответ 5

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

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

Пример:

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

=B1

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

=AND(A1=True,C1>0)

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

Ответ 6

В функции UDF листа VBA вы используете Application.Caller для получения диапазона ячеек (ячеек), которые содержат формулу, называемую UDF.

Ответ 7

Моя текущая колонка вычисляется по:

Способ 1:

= (АДРЕС (СТРОКА(), Column(), 4,1), LEN (АДРЕС (СТРОКА(), Column(), 4,1)) - LEN (СТРОКА())) ЛЕВЫЙ

Способ 2:

= (АДРЕС (СТРОКА(), Column(), 4,1), INT ((колонка() - 1)/26) + 1) ЛЕВЫЙ

Моя текущая строка вычисляется по:

= ПРАВЫЙ (АДРЕС (СТРОКА(), Column(), 4,1), LEN (СТРОКА()))

поэтому косвенная ссылка на Sheet2! My Column, но другая строка, указанная в столбце A моей строки:

Способ 1:

= INDIRECT ( "! Лист2" & LEFT (АДРЕС (СТРОКА(), COLUMN(), 4,1), LEN (АДРЕС (СТРОКА(), COLUMN(), 4,1)) - LEN (ROW())) & ДВССЫЛ (АДРЕС (СТРОКА(), 1,4,1)))

Способ 2:

= ДВССЫЛ ( "! Лист2" & ЛЕВЫЙ (АДРЕС (СТРОКА(), Column(), 4,1), INT ((колонка() - 1)/26) + 1) & ДВССЫЛ (АДРЕС ( СТРОКА(), 1,4,1)))

Итак, если A6 = 3, а моя строка - 6, а мой Col - C, возвращает содержимое "Sheet2! C3"

Итак, если A7 = 1, а моя строка - 7, а мой Col - D, возвращает содержимое "Sheet2! D1"

Ответ 8

Я искал решение этого и использовал косвенный, найденный на этой странице изначально, но я нашел его довольно длинным и неуклюжим для того, что я пытался сделать. После небольшого исследования я нашел более элегантное решение (по моей проблеме) с использованием нотации R1C1 - я думаю, вы не можете смешивать разные стили нотации, не используя VBA.

В зависимости от того, что вы пытаетесь сделать с ячейкой со ссылкой на себя, что-то вроде этого примера должно получить ячейку, чтобы ссылаться на нее, где ячейка F13:

Range("F13").FormulaR1C1 = "RC"

И затем вы можете ссылаться на ячейки в относительных позициях на эту ячейку, например, где ваша ячейка F13, и вам нужно ссылаться на G12.

Range("F13").FormulaR1C1 = "R[-1]C[1]"

Вы, по сути, говорите Excel, чтобы найти F13, а затем переместите вниз по 1 строке и вверх по одному столбцу.

Как это вписывалось в мой проект, было применить vlookup в диапазоне, где значение поиска было относительно каждой ячейки в диапазоне, не указывая каждую ячейку поиска отдельно:

Sub Code()
    Dim Range1 As Range
    Set Range1 = Range("B18:B23")
        Range1.Locked = False
        Range1.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],DATABYCODE,2,FALSE),"""")"
        Range1.Locked = True
End Sub

Мое значение поиска - это ячейка слева от каждой ячейки (столбец -1) в моем диапазоне DIM'd, а DATABYCODE - это именованный диапазон, на который я смотрю.

Надеюсь, что это мало смысла? Подумал, что стоило выбраться в микс как еще один способ подойти к проблеме.

Ответ 9

Просто для строки, но попробуйте указать ячейку чуть ниже выбранной ячейки и вычесть ее из строки.

=ROW(A2)-1

Допускается линейка ячейки A1 (эта формула будет находиться в ячейке A1.

Это позволяет избежать использования косвенных() и index(), но все же работает.