Как установить условное форматирование для конкретной ячейки, которое зависит от значения другой ячейки?

69

В моем примере я хотел бы условно отформатировать ячейки столбца B. Отмеченные знаком 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 Sheets и работает очень похоже на работу электронных таблиц Excel. Этот ответ объясняет его использование.

Роберт Коритник
источник
3
Поскольку вы добавили эту заметку за 2014 год, рассмотрите возможность перемещения флажка к ответу, описывающему современный подход.

Ответы:

50

Сложное условное форматирование может быть достигнуто в таблицах Google с помощью Google Apps Script. Например, вы могли бы написать функцию, которая изменяет цвет фона всей строки на основе значения в одной из ее ячеек, что, по моему мнению, невозможно в меню «Изменить цвет с помощью правил». Возможно, вы захотите установить триггеры для этой функции, такие как «При редактировании», «При открытии» и «При отправке формы».

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

ОБНОВЛЕНИЕ: Вот пример скрипта Google Apps для изменения цвета фона всей строки на основе значения в столбце A. Если значение положительное, используйте зеленый. Если пусто, белый. В противном случае красный. Смотрите результаты в этой общедоступной электронной таблице 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();
}

Liam
источник
Я получил ошибку в строке 13: var dataRange = sheet.getRange (r, 1, 1, 3); Если бы я хотел использовать этот скрипт для раскраски строки в соответствии с конкретным именем (например, Дэвид), как бы я изменил его. И я бы, вероятно, изменил шрифт вместо фона: setFontColor Также, как мне запустить скрипт в моей электронной таблице? Спасибо
2
Ссылка на пример больше не действительна. Как вы используете этот сценарий после его создания? Чего не хватает в этом ответе.
Даниэль Уильямс
3
Теперь есть более простой вариант для наиболее распространенных вариантов использования, описанных в моем ответе ниже.
Сэм Брайтман
1
Ссылка на таблицу Google, к сожалению, не работает. Было бы неплохо иметь краткое описание того, как использовать / активировать скрипты. Тем не менее отличный ответ, который просто работает. :)
Бримбориум
19

В новом Google Таблицы позволяют сделать это, как описано здесь . Сначала необходимо включить новые таблицы в настройках драйвера Google, как описано в статье. Затем вы можете выбрать «Пользовательская формула» в параметрах условного форматирования и ввести любую формулу (не забудьте добавить =префикс!). Ссылки на ячейки без $префиксов корректируются автоматически при применении к диапазонам, как и следовало ожидать.

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

Сэм Брайтман
источник
1
Спасибо за указание на это. Это действительно работает именно так, как я хочу.
Роберт Коритник
В настоящее время большинство старых электронных таблиц были перенесены в новые таблицы Google, поэтому примечание о поддержке миграции устарело.
Рубен
2

Я написал это веб-приложение Color Code + с Apps-Script, чтобы покрыть большинство основных потребностей условного форматирования. Бросьте в некоторых правилах , и он будет выплевывать код , который вы можете вставить в таблицу, при ИнструментыРедактор скриптов ... . ( Справочная ветка на форумах Google.)

Брайан П
источник
1

Правила условного форматирования в Google Sheets выглядят следующим образом, если вы хотите условно отформатировать на красном фоне, если сумма в двух ячейках отличается от суммы в третьей ячейке:

Правила условного формата Google Sheets с одним цветом и пользовательской формулой

ViliusK
источник
0

Условное форматирование - пользовательская формула

range 2:227

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

выберите цвет, который вы хотите, чтобы строка была выделена.

Хари Р
источник
0

(Февраль 2017 г.) Как уже упоминалось в другом ответе, Google Sheets теперь позволяет пользователям добавлять условное форматирование непосредственно из пользовательского интерфейса, будь то на настольном компьютере / ноутбуке, устройствах Android или iOS. Тем не менее, остальная часть этого ответа в первую очередь предназначена для разработчиков, потому что вы можете написать приложения, которые «делают» условное форматирование.

С помощью Google Sheets API 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 -е место.

wescpy
источник
На этот вопрос также есть несколько ответов на этот вопрос. К какому «другому ответу» относится этот ответ? (: С другой стороны, хотя люди, которые заходят на этот сайт, могут писать код, я думаю, что большинство из них делают это как «разработку для конечного пользователя», как в пользовательских функциях / пользовательских функциях. Я не уверен, что такие термины, как CRUDбольшинству из них известно, и что они могут найти полезными все дополнительные детали, которые включены в этот ответ
Рубен
0

Чтобы рассмотреть особенности Q в «новых» листах, я предлагаю очистить любое условное форматирование от B: B, выбрать ColumnB и применить пользовательскую формулу :

=A1=1

с форматированием выбора и Done.

pnuts
источник
0

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

=if(A1 = 1 , true)

Выберите ваши цвета, и все готово.

user3246197
источник
-1

Отредактируйте в ответ на уточнение вопроса:

В вашем окне Google Spreadsheet есть меню «Формат» с опцией «Изменить цвет с помощью правил». Это так же технически, как условное форматирование в 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формулу, чтобы увидеть, был ли x помещен в соответствующий столбец C:

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

IFФормула состоит из 3 частей - тест, то тогда значение, и другое значение. В приведенном выше примере формула проверяет, есть ли xв столбце C. Если есть, он вводит значение из A1, в противном случае он вводит пробел. Неважно, в xверхнем или нижнем регистре.

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

Джаред Харли
источник
1
Я думаю, вы меня не поняли. Речь идет об условном форматировании, не помещающем значения в ячейки.
Роберт Коритник