Формула Excel для ссылки "ЯЧЕЙКА НАЛЕВО"


86

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

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

Благодаря!


3
... и в случае, если кто-то его ищет ... чтобы колонка =INDIRECT("RC[1]",0)
направилась

Это очень хороший вопрос. К сожалению, я не уверен, правильно ли я понимаю это, исходный плакат хотел, чтобы его ячейки изменялись без необходимости выполнять условное форматирование, а затем вставлять средство рисования формата в каждую ячейку. Допустим, у нас есть месяцы в строках, а бананы, яблоки и апельсины в столбцах. В матрице указаны цены. Как мы сможем сделать что-то, что будет автоматически ОКРАШИВАТЬ ЯЧЕЙКУ КРАСНЫМ, если бы цена изменилась с предыдущего месяца на текущий? Если есть также автоматический способ окрашивания ячеек в зеленый цвет, если цена снижается, и красный, если
Брайан

Ответы:


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

14
Использовать ПЯТЬ редко используемых функций поиска и использования вместо простой относительной ссылки A1 или RC [-1]? Это как путешествие из Бруклина в Бронкс с остановкой в ​​Walla Walla WA!
John Machin

5
Почему бы вместо этого не сделать это = КОСВЕННЫЙ (АДРЕС (СТРОКА (), КОЛОНКА () - 1))
Прометей

1
«Косвенный» имеет так много проблем, в том числе (но не ограничиваясь) быть (1) однопоточным и (2) нестабильным (возможно, заставляя всю вашу книгу пересчитывать каскад при каждом изменении. Не используйте его, если производительность имеет значение .
Джон Джозеф

В разделе «Условное форматирование» я устанавливаю правило как « ="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""но ячейка не форматируется». Что случилось?
молния

81

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

=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.


11

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

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

В этом примере, начиная с B1, левая ячейка будет A1. Просто используйте это - никаких сложных формул не требуется.


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


7

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

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

=RC[-1]

5

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

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

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

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

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

=OFFSET(B2,0,-1)

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

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


2
Это бесполезно. Если вы уже знаете, что ваша ячейка - это B2, вы можете просто написать B1 для ячейки слева и вообще не использовать смещения. Дело в том, чтобы сделать что-то совершенно общее.
Мэтью Рид

1
Это очень удобно, если вы знаете, с какой ячейки вы начинаете, и только смещение, которое вы хотите сделать, это, например, динамическое say = OFFSET (B2,0, A2). В каком контексте я это использовал.
Сэм Фед

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

1

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

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

Затем автоматически продлите вправо, вы получите

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

Если смещение вне диапазона доступной ячейки, вы получите # ССЫЛКА! ошибка.

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


1

Еще проще:

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

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


Никогда не делай этого. INDIRECT ломает дерево зависимостей - это катастрофа.
Ollie2893

Я только что обнаружил эту функцию, которая, как мне кажется, полезна для условного форматирования в зависимости от первой строки столбца. Не уверен, что нотация RC [] работает для этого
thintux

1

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

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

Function my_user_defined_function(argument1, argument2)
    ' Way to convert a column number to its name copied from StackOverflow
    ' http://stackoverflow.com/a/10107264
    ' Answer by Siddarth Rout (http://stackoverflow.com/users/1140579/siddharth-rout)
    ' License (if applicable due to the small amount of code): CC BY-SA 3.0
    colName = Split(Cells(, (Application.Caller(1).Column - 1)).Address, "$")(1)

    rowNumber = Application.Caller(1).Row

    left_cell_value = ActiveSheet.Range(colName & rowNumber).Value

    ' Now do something with left_cell_value

0

Вы можете использовать сценарий 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

0

Я наткнулся на эту ветку, потому что хотел всегда ссылаться на «ячейку слева», но СОВЕРШЕННО в энергонезависимой форме (без смещения, косвенных и подобных катастроф). Глядя в сеть вверх и вниз, ответов нет. (Эта ветка на самом деле тоже не дает ответа.) После некоторого размышления я наткнулся на самый удивительный метод, которым я хотел бы поделиться с этим сообществом:

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

Это то, что мы делаем периодически. В каждом столбце есть дата, и эти даты ДОЛЖНЫ БЫТЬ в хронологическом порядке (для помощи в MATCH и т. Д.). Очень часто случается, что мы забываем ввести шаг. Теперь предположим, что вы хотите вставить столбец между 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, кажется, понимает, что, хотя диапазон INDEX охватывает ячейку, которую мы пересчитываем, сама эта ячейка не адресуется INDEX и, следовательно, НЕ создает циклическую ссылку.

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



0

Сделайте именованную формулу "LeftCell"

Для тех, кто ищет энергонезависимый ответ, вы можете сделать это, используя функцию ИНДЕКС в именованной формуле.

  1. Выберите ячейку A2

  2. Открыть Name Manager(Ctrl + F3)

  3. Нажмите New

  4. Назовите его LeftCell (или как хотите)

  5. Для Scope:выберитеWorkbook

  6. В Refers to:введите формулу:

    =INDEX(!A1:!A2, 1)

  7. Нажмите OKи закройтеName Manager

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


0

Думаю, это самый простой ответ.

Используйте «Имя» для ссылки на смещение.

Допустим, вы хотите просуммировать столбец (столбец A) до ячейки, содержащей суммирование (например, ячейка A100), но не включая ее; сделай это:

(Я предполагаю, что при создании имени вы используете ссылку A1; впоследствии можно переключить R1C1)

  1. Щелкните в любом месте листа, а не в верхней строке - скажем, ячейка D9.
  2. Определите именованный диапазон с именем, скажем «OneCellAbove», но замените поле «RefersTo» на «= D8» (без кавычек)
  3. Теперь в ячейке A100 вы можете использовать формулу
    = СУММ (A1: OneCellAbove)

-1

Выберите весь лист и нажмите HOME> Styles - Conditional Formatting, New Rule ..., Используйте формулу, чтобы определить, какие ячейки нужно форматировать, и форматируйте значения, в которых эта формула верна :

=A1<>XFD1

Format...Выберите выбор форматирования OK, OK.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.