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

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

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

спасибо!

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 возвращает ссылку относительно текущей ссылки, поэтому, если indirect возвращает правильную ссылку, она вам не нужна.


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

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

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

чтобы сделать эту работу, мы можем запутать этот банальный расчет самым удивительным образом F6=index ($E6:F6;1;columns ($E1:F1)-1)+F5. Скопируйте справа, и вы получите G6=index ($E6:G6;1;columns ($E1:G1)-1)+G5.

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

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


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

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