Условное форматирование на основе значений в отдельном столбце на основе проверки данных с отдельного листа

Я делаю журнал электронных таблиц с:
- основной записью на листе 1
- статическим списком имен и данных на листе 2

В листе 1 я ввожу значения через проверку данных на основе имен в листе 2. Позже я добавляю значение в лист1. Это значение необходимо сравнить с минимальным и максимальным значениями, указанными в листе 2, а затем присвоить им цветовую кодировку с помощью условного форматирования на основе% отклонения от значений в листе 2. Например:

На листе 1 есть данные:

     A                          B
1    value                      OG 
2    British Brown Ale          1.045 

значение British Brown Ale вводится через раскрывающийся список, заполняемый из списка проверки данных. В B2 у меня есть значение "OG", равное 1.045.

На листе 2 данные выглядят так:

     A                          B          C
1    value                      min OG     max OG 
2    British Brown Ale          1.040      1.052 

В ряду с "British Brown Ale":

  • в столбце 2 ("Min OG") у меня значение 1.040
  • в столбце 3 («Макс. OG») у меня значение 1.052

Желаемый результат

Мне нужно сделать:

  1. диапазон от 1.040 до 1.052 100% в пределах диапазона и цветовой код этого зеленого,
  2. Если значение в sheet1!B2 было, например, на 10% вне этого диапазона, оно было бы обозначено желтым цветом,
  3. и более 10% будут иметь красный цвет.

Как использовать условное форматирование, позволяющее сравнивать значения, как указано выше?

Потребуются ли мне сценарии для этого?


person Nixxen    schedule 04.10.2016    source источник


Ответы (1)


Можно делать только с формулами. Лучше всего использовать только ArrayFormula для создания всех формул расширять автоматически.

Лист2

Добавьте две колонки: «мин. - 10%» и «макс. + 10%».

в ячейке D2:

=ArrayFormula(OFFSET(B2,,,COUNTA(A2:A))/1.1)

в ячейке E2:

=ArrayFormula(OFFSET(C2,,,COUNTA(A2:A))*1.1)

Результат:

введите здесь описание изображения

Лист1

4 формулы для получения "мин", "макс", "мин-10%", "макс + 10%"

в ячейке C2:

=ArrayFormula(VLOOKUP(OFFSET(A2,,,COUNTA(A2:A)),sheet1!A:E,2,0))

в ячейке D2:

=ArrayFormula(VLOOKUP(OFFSET(A2,,,COUNTA(A2:A)),sheet1!A:E,3,0))

в ячейке E2:

=ArrayFormula(VLOOKUP(OFFSET(A2,,,COUNTA(A2:A)),sheet1!A:E,4,0))

в ячейке F2:

=ArrayFormula(VLOOKUP(OFFSET(A2,,,COUNTA(A2:A)),sheet1!A:E,5,0))

И одна формула, чтобы иметь цвет:

=ArrayFormula(if(--(OFFSET(B2,,,COUNTA(A2:A))<OFFSET(E2,,,COUNTA(A2:A)))+B2>F2,"red",if((OFFSET(B2,,,COUNTA(A2:A))>=OFFSET(C2,,,COUNTA(A2:A)))*(+OFFSET(B2,,,COUNTA(A2:A))<=OFFSET(D2,,,COUNTA(A2:A))),"green","yellow")))

Результат:

введите здесь описание изображения

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

Выберите столбец B, добавьте 3 новых правила условного форматирования (CF), настраиваемую формулу:

сначала закрашиваем зеленым:

=$G1="green"

далее закрашиваем желтым цветом:

=$G1="yellow"

далее красим красным:

=$G1="red"

Тогда вы можете скрыть лишние столбцы.

Результат:

введите здесь описание изображения


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

person Max Makhrov    schedule 05.10.2016
comment
Я совершенно не знаком с ArrayFormula, и я не совсем уверен, что понимаю, что он делает в том виде, в котором вы его настроили, но я постараюсь выполнить эту работу и доложу здесь. Перед тем, как вы опубликовали это, я приготовил рабочую формулу, которая срабатывает по зеленому цвету при использовании в ячейке, но я не мог заставить ее работать с условным форматированием, так как я ссылался на другой лист, а это, по-видимому, невозможно. =IF(AND(H4*1000>INDEX(Styles!M:M,MATCH(F4,Styles!C:C,0)),H4*1000<=INDEX(Styles!N:N,MATCH(F4,Styles!C:C,0))),"Inside Range: Green","Outside Range") - person Nixxen; 05.10.2016
comment
Не удалось ответить всем одним сообщением. Чтобы прояснить; F4 - это проверенные данные "British Brown Ale". Styles! является листом2. H4 - это OG на листе 1. Столбец Styles!M является справочным min OG. Styles!N является ссылкой max OG. - person Nixxen; 05.10.2016
comment
Есть ли способ сделать это с помощью методов ArrayFormula без необходимости редактировать Sheet2? Это прямая копия официального таблицы данных 1: 1, и я бы предпочел не вносить в нее никаких изменений. В итоге будет всего 3 диапазона Мин / Макс, которые будут иметь цветовую кодировку на основе этого, поэтому чем меньше дополнительных столбцов, тем лучше. Справочный лист не очень большой - всего 119 стилей, поэтому тяжелые алгоритмы должны работать. - person Nixxen; 06.10.2016
comment
Да, вам нужно заменить формулы с листа 2 на лист 1 - person Max Makhrov; 06.10.2016
comment
Как только мне удалось осознать, как работают разные формулы, это на самом деле довольно быстро реализовать в моем листе, несмотря на то, что он занимает очень много места. Я использовал более чем полный алфавит из OFFSET диапазонов, но альтернатива - преобразование большей части в одну формулу - становилась чрезвычайно сложной по мере того, как мне требовалось добавить больше информации. Это отлично работает, спасибо! - person Nixxen; 07.10.2016
comment
У меня есть одна проблема, которую я пока не могу решить. По какой-либо причине Color (столбец G) учитывает только первый OG. Если я настрою один из других на что-то далеко, это не вызовет красный диапазон, но если я изменю первый вход OG на что-то за пределами диапазона, цвета для остальных последуют. Я новичок в этом, поэтому все еще пытаюсь понять, почему это происходит. Я обновлю, если найду. - person Nixxen; 07.10.2016
comment
Догадаться! Это была комбинация смешанных локализаций и плохой формулы. Правильная формула цвета (с использованием German Localizaiton, чтобы сделать его дружественным к номерам для ЕС): =ArrayFormula(if(--(OFFSET(B2:B;;;COUNTA(A2:A))<OFFSET(E2:E;;;COUNTA(A2:A)))+--(OFFSET(B2:B;;;COUNTA(A2:A))>OFFSET(F2:F;;;COUNTA(A2:A)));"red";if((OFFSET(B2:B;;;COUNTA(A2:A))>=OFFSET(C2:C;;;COUNTA(A2:A)))*(+OFFSET(B2:B;;;COUNTA(A2:A))<=OFFSET(D2:D;;;COUNTA(A2:A)));"green";"yellow"))) - person Nixxen; 10.10.2016