Як я можу встановити умовне форматування для певної комірки, яке залежить від значення іншої комірки?


69

У своєму прикладі я хотів би умовно форматувати комірки В стовпця. Позначені символом x слід відформатувати відповідно до значення у стовпці A (у прикладі значення 1):

A | B
1 | x
2 | 
3 | 
1 | x
1 | x
4 | 
8 |

// x can be any value and is here merely to mark the cell that should be formatted

ВАЖЛИВО ПРИМІТКА 2014 : Умовне форматування на основі формули, яка може включати інші комірки, тепер можливе в Google Таблицях і працює дуже подібно до роботи електронних таблиць Excel. Ця відповідь пояснює його використання.


3
Оскільки ви додали цю примітку до 2014 року, будь ласка, також подумайте про перенесення позначки на відповідь, яка описує сучасний підхід.

Відповіді:


50

Складне умовне форматування можна досягти в електронних таблицях Google за допомогою Google Apps Script. Наприклад, ви можете написати функцію, яка змінює колір тла цілого рядка на основі значення в одній з його комірок, те, що, на мою думку, не можливо в меню "Змінити колір з правилами". Ймовірно, ви хочете встановити тригери для цієї функції, такі як "Увімкнути редагування", "Увімкнено" та "Надіслати форму".

Документація для функції setBackgroundRGB ()

ОНОВЛЕННЯ. Ось приклад сценарію Google Apps для зміни кольору тла цілого рядка на основі значення в стовпці А. Якщо значення додатне, використовуйте зелений. Якщо порожній, білий. Інакше червоний. Результати див. У цій загальнодоступній таблиці Google . (Вам потрібно буде ввійти для запуску сценарію, але без входу ви все одно можете побачити результати).

function colorAll() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var endRow = sheet.getLastRow();

  for (var r = startRow; r <= endRow; r++) {
    colorRow(r);
  }
}

function colorRow(r){
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 1, 1, 3);

  var data = dataRange.getValues();
  var row = data[0];

  if(row[0] === ""){
    dataRange.setBackgroundRGB(255, 255, 255);
  }else if(row[0] > 0){
    dataRange.setBackgroundRGB(192, 255, 192);
  }else{
    dataRange.setBackgroundRGB(255, 192, 192);
  }

  SpreadsheetApp.flush(); 
}

function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 2) {
    colorRow(r);
  }
}

function onOpen(){
  colorAll();
}

Сігналы абмеркавання


Я отримав помилку в рядку 13: var dataRange = sheet.getRange (r, 1, 1, 3); Якщо я хотів би скористатися цим сценарієм, щоб пофарбувати рядок відповідно до конкретного імені (наприклад, Девід), як би я змінив його. І я, мабуть, змінив би шрифт замість фону: setFontColor Також, як запустити скрипт на своїй електронній таблиці? Дякую

2
Посилання на приклад вже не дійсне. Як ви використовуєте цей скрипт після його створення? Цього немає у цій відповіді.
Даніель Вільямс

3
Зараз є більш простий варіант для найбільш поширених випадків використання, описаний у моїй відповіді нижче.
Сем Брайтман

1
На жаль, посилання на електронну таблицю Google розірвано. Було б непогано описати, як використовувати / активувати сценарії. Тим не менш чудова відповідь, що просто працює. :)
brimborium

19

У новому Google Таблиці дозволяють зробити це, як описано тут . Спочатку потрібно ввімкнути нові електронні таблиці в налаштуваннях драйвера Google, як описано в статті. Тоді ви можете обрати "Спеціальна формула є" з умов умовного форматування та ввести будь-яку формулу (не забудьте додати =префікс!). Посилання на комірки без $префіксів коригуються автоматично при застосуванні до діапазонів, як ви очікували.

Здається, що підтримки міграції зі старого на нове бракує - це стосується лише нових аркушів, і я виявив, що тільки значення можна копіювати з одного на інший. Копіювання всього аркуша може бути варіантом.


1
Дякуємо, що вказали на це. Це дійсно працює саме так, як я цього хочу.
Роберт Коритник

Наразі більшість старих електронних таблиць було перенесено на нові Google Таблиці, тому примітка про підтримку міграції застаріла.
Рубен

2

Я написав цей веб-додаток Color Code + разом із Apps-Script, щоб покрити більшість основних потреб у формальному форматуванні. Киньте в деяких правилах , і він буде випльовувати код , який ви можете вставити в таблицю, при ІнструментиРедактор скриптів ... . ( Довідкова нитка на форумах Google.)


1

Правила умовного формату Google Таблиць виглядають приблизно так, якщо ви хочете умовно форматувати червоне тло, якщо сума в двох клітинках відрізняється, ніж у 3-й комірці:

Правила умовного формату Google Таблиць із однокольоровою та власною формулою


0

Умовне форматування - спеціальна формула

range 2:227

= if($i:$i = "Duplicate",True,False)

виберіть колір, для якого слід виділити рядок.


0

(Лютий 2017) Як уже згадувалося в іншій відповіді, Google Sheets тепер дозволяє користувачам додавати умовне форматування безпосередньо з користувальницького інтерфейсу, будь то на робочому столі / ноутбуці, пристроях Android або iOS. Однак решта цієї відповіді в першу чергу стосується розробників, оскільки ви можете писати додатки умовного форматування.

За допомогою API Google Sheets v4 (і новіших версій) розробники тепер можуть писати програми, які керуються умовами форматування CRUD. Перегляньте посібник та зразки на сторінках для отримання більш детальної інформації, а також довідкових документів (пошук {add,update,delete}ConditionalFormatRule). Посібник містить цей фрагмент Python (припускаючи ідентифікатор файлу SHEET_IDі SHEETSяк кінцеву точку служби API):

myRange = {
    'sheetId': 0,
    'startRowIndex': 1,
    'endRowIndex': 11,
    'startColumnIndex': 0,
    'endColumnIndex': 4,
}

reqs = [
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {'textFormat': {'foregroundColor': {'red': 0.8}}}
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {
                    'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4}
                },
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
]

SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body={'requests': reqs}).execute()

Окрім Python, API Google підтримують різні мови , тому у вас є варіанти. У будь-якому випадку, цей зразок коду формує Таблицю (див. Зображення нижче) таким чином, що ті, хто молодший за медіанний вік, виділяються світло-червоним кольором, тоді як ті, хто перебуває за медіаною, мають свої кольори, пофарбовані червоним шрифтом.

Приклад умовного форматування

ПРИМІТКА: моя відповідь тут ідентична відповіді на SO на це питання, за винятком того, що я скинув PSA, оскільки йому не потрібно жити на> 1 місці.


На це питання є кілька відповідей, як і на питання, про яке йдеться. Яка «інша відповідь», на яку ця відповідь стосується? (: З іншого боку, хоча люди, які заходять на цей сайт, можуть писати код, я думаю, що більшість з них робить це як "розвиток кінцевого користувача", як у користувацьких функціях / визначених користувачем функціях. Я не впевнений, що такі терміни, як CRUDвідомий більшістю з них і що вони можуть знайти корисні всі додаткові подробиці, які містяться у цій відповіді.
Рубен

0

Для вирішення особливостей Q у "нових" Таблицях я пропоную очистити будь-яке умовне форматування з B: B, вибрати стовпецьB та застосувати користувацьку формулу :

=A1=1

з форматуванням за вибором і Done.


0

Редагуючи умовне форматування, виберіть Спеціальна формула та скористайтеся наступним ...

=if(A1 = 1 , true)

Виберіть свої кольори, і ви закінчите.


-1

Відредагуйте у відповідь на уточнення питання:

У вікні електронних таблиць Google є меню Формат з опцією "Змінити колір за допомогою правил". Це так само технічно, як і умовне форматування Google Spreadsheet. Наскільки я можу сказати, немає можливості пофарбувати одну клітинку, грунтуючись на значенні іншого - Google не дозволяє вводити формули для інших комірок.

Якщо ви не вводите інші дані у стовпчик B, ви завжди можете зробити всі стовпці B рівними стовпцям A, а потім скористатися параметром "Змінити колір правилами", щоб пофарбувати всі комірки зі значенням 1 схожими кольорами, тобто, червоний фон і червоний текст, коли значення дорівнює 1, білий фон і білий текст, коли його немає, ефективно приховуючи значення у стовпці B. Це надасть вам потрібний вигляд.

У Excel ви можете робити все, що завгодно. Використовуючи ваші дані як приклад, я умовно відформатував B1, коли ця формула відповідає дійсності:

=IF(A1=1,true,false)

а потім перетягнув форматування вниз, яке виділило лише клітинки B, де це сусід у стовпці A, що дорівнює 1.

Excel може це зробити, але не Google


Оригінальний відповідь

Я не впевнений, чи можна це зробити у 2 стовпцях, але я знаю, що ви можете це зробити у 3:

 A  |  B  |  C
----------------
 1  |  f  |  x

У стовпці B ви можете використовувати IFформулу, щоб побачити, чи розміщено х у відповідному стовпці С:

=IF(C1="x",A1,"") 

IFФормула складається з 3 частин - тест, то тоді значення, і інше значення. У наведеному вище прикладі формула перевіряє, чи є xв стовпці С. Якщо є, він вводить значення з A1, в іншому випадку він вводить порожнє. Не має значення, чи xце верхній чи нижній регістр.

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


1
Я думаю, ти мене зрозумів неправильно. Питання полягає в умовному форматуванні, не розміщенні значень у комірках.
Роберт Коритник

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