Формула Excel для посилання "КЛІТИНА ВЛІВО"


86

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

Я можу робити це для кожної комірки та перетягувати його за форматом, але я хотів би, щоб загальна формула застосовувалася до цілого аркуша.

Дякую!


3
... і на випадок, якщо хтось це шукає ..., щоб вивести колонку праворуч:=INDIRECT("RC[1]",0)
prograhammer

Це дуже велике питання. На жаль, я не впевнений, чи правильно я це розумію, оригінальний плакат хотів, щоб його комірки змінилися, не виконуючи умовного форматування, а потім вставляючи художник форматування в кожну комірку. Скажімо, у нас місяці в рядах, а в колонах банани, яблука та апельсини. У матриці вказані ціни. Як ми змогли б зробити щось, що автоматично КОЛІРУЄ КЛІТИНУ ЧЕРВОНУ, якщо змінилася ціна з попереднього місяця на поточний? Якщо є також автоматичний спосіб забарвити клітини в зелений, якщо ціна знизиться, а в червоний, якщо
Брайан

Відповіді:


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
Це не корисно. Якщо ви вже знаєте, що ваша комірка - В2, ви можете просто написати B1 для комірки ліворуч і взагалі не використовувати зміщення. Сенс у тому, щоб зробити щось цілком загальне.
Метью Прочитав

1
Це досить зручно, якщо ви знаєте, з якої комірки ви починаєте, і лише зміщення, яке ви хочете зробити, - це, наприклад, динамічне скажімо = 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

Якщо зсув виходить за межі діапазону доступної комірки, ви отримуєте #REF! помилка.

Сподіваюся, вам сподобається.


1

Ще простіше:

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

OFFSET повертає посилання відносно поточного посилання, тому, якщо непряме повертає правильне посилання, воно вам не потрібне.


Ніколи цього не роби. INDIRECT розбиває дерево залежностей - це катастрофа.
Ollie2893

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

1

Створюючи визначену користувачем функцію , я з'ясував, що інші відповіді, що стосуються функцій OFFSETтаINDIRECT не можуть бути застосовані.

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

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.

Це те, що ми робимо періодично. Кожен стовпець має дату, і ці дати ПОВИННІ БУТИ в хронологічному порядку (щоб допомогти у збігу тощо). Часто трапляється так, що ми забуваємо ввести крок. Тепер припустимо, ви хочете вставити стовпець між F та G (щоб наздогнати ваш пропуск) та скопіюйте F у новий G (щоб повторно заповнити формулу продовження). Це НІЧЕ НЕ КОРОТКО від повної катастрофи. Спробуйте - H6 тепер скаже = F6 + H5, а НЕ (як нам це абсолютно потрібно) = G6 + H5. (Новий G6 буде правильним.)

Щоб зробити це, ми можемо затуманити цей банальний розрахунок найдивовижнішим чином F6 = індекс ($ E6: F6; 1; стовпці ($ E1: F1) -1) + F5. Скопіюйте праворуч, і отримаєте G6 = індекс ($ E6: G6; 1; стовпці ($ E1: G1) -1) + G5.

Це ніколи не повинно працювати, правда? Циркулярне посилання, чітко! Спробуйте і дивуйтеся. Excel, здається, усвідомлює, що хоча діапазон INDEX охоплює клітинку, яку ми перераховуємо, ця сама комірка не адресована INDEX і, отже, НЕ створює кругового посилання.

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



0

Створіть іменовану формулу "LeftCell"

Для тих, хто шукає енергонезалежну відповідь, ви можете досягти цього за допомогою функції INDEX у названій формулі.

  1. Виберіть комірку А2

  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. Тепер у Cell A100 ви можете використовувати формулу
    = SUM (A1: OneCellAbove)

-1

Виберіть весь аркуш і ДОМАШНЯ> Стилі - умовне форматування, нове правило ..., використовуйте формулу, щоб визначити, які клітинки потрібно відформатувати та відформатувати значення, де ця формула відповідає дійсності ::

=A1<>XFD1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.