Формула Excel для ссылки "ячейка слева"
Я пытаюсь выполнить Условное форматирование, чтобы цвет ячейки менялся, если значение отличается от значения в ячейке слева от него (каждый столбец-месяц, в каждой строке-расходы на определенный объект. Я хочу легко отслеживать изменения цен в течение нескольких месяцев.)
Я могу сделать это за ячейку и формат-перетащите его, но я хотел бы, чтобы общая формула применялась ко всему листу.
спасибо!
11 ответов
самая короткая наиболее совместимая версия:
=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.