В функции рабочего листа в Excel, как вы ссылаетесь на ячейку, столбец или строку, в которой вы находитесь?
Обратите внимание, что это чрезвычайно полезно для условного форматирования.
В функции рабочего листа в Excel, как вы ссылаетесь на ячейку, столбец или строку, в которой вы находитесь?
Обратите внимание, что это чрезвычайно полезно для условного форматирования.
где 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
Для самой ячейки для саморекламы:
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 нестабильна и должна использоваться только при необходимости.
Я не вижу необходимости в косвенном, особенно для условного форматирования.
Самый простой способ самосогласования ячейки, строки или столбца - относиться к ней обычно, например, "= A1" в ячейке A1, и сделать ссылку частично или полностью относительной. Например, в условной форматирующей формуле для проверки наличия в первом столбце строк различных ячеек введите следующее с выделенным A1 и скопируйте при необходимости. Условное форматирование всегда будет ссылаться на столбец А для строки каждой ячейки:
= $A1 <> ""
Для нелетучего решения, как насчет в 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)
Существует лучший способ, который безопаснее и не замедлит ваше приложение. Как настроен Excel, ячейка может иметь либо значение, либо формулу; формула не может ссылаться на свою собственную ячейку. В противном случае вы получите бесконечный цикл, так как новое значение вызовет другой расчет....
Используйте вспомогательный столбец для вычисления значения на основе того, что вы положили в другую ячейку.
Пример:
Столбец A является истинным или ложным, столбец B содержит денежное значение, столбец C содержит следующую формулу:
=B1
Теперь, чтобы вычислить, что столбец B будет выделен желтым в условном формате, только если столбец A равен True, а столбец B больше нуля...
=AND(A1=True,C1>0)
Затем вы можете скрыть столбец C
В функции UDF листа VBA вы используете Application.Caller для получения диапазона ячеек (ячеек), которые содержат формулу, называемую UDF.
Моя текущая колонка вычисляется по:
Способ 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"
Я искал решение этого и использовал косвенный, найденный на этой странице изначально, но я нашел его довольно длинным и неуклюжим для того, что я пытался сделать. После небольшого исследования я нашел более элегантное решение (по моей проблеме) с использованием нотации 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 - это именованный диапазон, на который я смотрю.
Надеюсь, что это мало смысла? Подумал, что стоило выбраться в микс как еще один способ подойти к проблеме.
Просто для строки, но попробуйте указать ячейку чуть ниже выбранной ячейки и вычесть ее из строки.
=ROW(A2)-1
Допускается линейка ячейки A1 (эта формула будет находиться в ячейке A1.
Это позволяет избежать использования косвенных() и index(), но все же работает.