Формула Excel для ссылки "ячейка слева"


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

Я могу сделать это за ячейку и формат-перетащите его, но я хотел бы, чтобы общая формула применялась ко всему листу.

спасибо!

11   60  

11 ответов:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

самая короткая наиболее совместимая версия:

=INDIRECT("RC[-1]",0)

"RC[-1]" означает один столбец слева. "R[1]C[-1]" находится внизу слева.

второй параметр 0 означает, что первый параметр интерпретируется с использованием нотации R1C1.

другие варианты:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

слишком долго на мой взгляд. Но полезно, если относительное значение является динамическим/производным от другой ячейки. например:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0, A1)

самый простой вариант:

= RC[-1]

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

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

Excel правильно применит форматирование к остальным ячейкам соответственно.

в этом примере, начиная с B1,левый ячейки А1. Просто используйте это--нет расширенной формулы требуемый.


если вы ищете что-то более продвинутое, вы можете поиграть с column(),row() и indirect(...).

Если вы измените ссылку на ячейку, чтобы использовать нотацию R1C1 (Инструменты|Параметры, вкладка Общие), то вы можете использовать простую нотацию и вставить ее в любую ячейку.

теперь ваша формула просто:

=RC[-1]

заполните ячейку A1, по следующей формуле :

 =IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"

затем autoextend направо, Вы получаете

 1|  A  |  B  |  C  |  ect ect
 2|    1|   11|  111|  ect ect

если смещение находится вне диапазона доступной ячейки, вы получаете #REF! ошибка.

Надеюсь, вам понравится.

вместо того чтобы писать очень долго:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

вы можете просто написать:

=OFFSET(*Name of your Cell*,0,-1)

таким образом, например, вы можете написать в ячейку B2:

=OFFSET(B2,0,-1)

для ссылки на ячейку B1

еще спасибо Джейсон Янг!! Я бы никогда не придумал это решение без вашего ответа!

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

вместо этого, вы должны использовать Application.Caller для ссылки на ячейку, в которой была использована пользовательская функция (UDF). На втором шаге вы преобразуете индекс столбца в имя соответствующего столбца.
Наконец, вы можете ссылаться на левую ячейку с помощью активного листа

вы можете использовать сценарий VBA, который изменяет Условное форматирование выделения (возможно, вам придется соответствующим образом настроить условие и форматирование):

For Each i In Selection
i.FormatConditions.Delete
i.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=" & i.Offset(0, -1).Address
With i.FormatConditions(1).Font
    .Bold = True
End With
Next i

еще проще:

=indirect(address(row(), column() - 1))

OFFSET возвращает ссылку относительно текущей ссылки, поэтому, если косвенная возвращает правильную ссылку, она вам не нужна.

я наткнулся на эту тему, потому что я хотел всегда ссылаться на "ячейку слева", но принципиально энергонезависимым способом (без смещения, косвенных и подобных катастроф). Глядя в сеть вверх и вниз, нет ответов. (Этот поток на самом деле не дает ответа.) После некоторой возни я наткнулся на самый удивительный метод, которым мне нравится делиться с этим сообществом:

предположим, что начальное значение 100 в E6. Предположим, я ввожу дельту к этому значению в F5, скажем 5. Затем мы рассчитаем значение продолжения (105) в F6 = E6+F5. Если вы хотите добавить еще один шаг, легко: просто скопируйте столбец F в столбец G и введите новую дельту в G5.

Это то, что мы делаем, периодически. Каждый столбец имеет дату, и эти даты должны быть в хронологическом порядке (чтобы помочь с совпадением и т. д.). Время от времени случается так, что мы забываем сделать шаг. Теперь предположим, что вы хотите вставить столбец между F и G (чтобы наверстать упущенное) и скопировать F в новый G (для повторного заполнения формулы продолжения). Это не что иное, как полная катастрофа. Попробуйте - H6 теперь скажет =F6+H5, а не (как нам абсолютно нужно) =G6+H5. (Новый G6 будет правильным.)

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

Так что теперь я дома и сухой. Вставьте столбец между F и G, и мы получим именно то, что нам нужно: значение продолжения в старом H будет ссылаться на значение продолжения, которое мы вставили в новый G.

почему бы просто не использовать:

=ADDRESS(ROW(),COLUMN()-1)