Excel 2007: условное форматирование, чтобы каждая строка отображала низкие значения желтого цвета, высокие значения красного цвета

14

У меня есть таблица с примерно 300 строк. Каждая строка имеет около 15 столбцов, и каждая ячейка содержит числовое значение. Каждый ряд соответствует продукту.

Я хочу, чтобы в Excel для каждого продукта выделялись ячейки с наивысшими номерами красным цветом и наименьшими номерами желтым цветом с градиентом для чисел между ними. Это то, что происходит, если я выбираю строку (в частности, 15 ячеек в строке, которые содержат мои данные), а затем нажимаю Условное форматирование> Цветовые шкалы> Красно-желтая цветовая шкала.

Тем не менее, у меня есть 300 строк, и это займет слишком много времени, чтобы выбрать каждую строку отдельно и установить условное форматирование. С другой стороны, если я выбираю весь диапазон и применяю условное форматирование, Excel вычисляет цвета на основе всего диапазона, тогда как на самом деле я хочу, чтобы они вычислялись построчно. Например, возьмите этот пример данных:

1 2 3
4 5 6
7 8 9

Я хочу получить вывод, используя Y для желтого, O для оранжевого, R для красного:

Y O R
Y O R
Y O R

Однако, если я выберу весь диапазон и приму условное форматирование, я получу:

Y Y Y
O O O
R R R

Есть ли способ сделать это, не делая это по одной строке за раз?

Майкл Пейви
источник
@wizlog: Это верно. Самое высокое значение в строке должно быть красным, самое низкое значение в этой строке должно быть желтым, а остальные значения должны находиться где-то посередине (чем ближе к максимальному значению, тем краснее).
Майкл Пейви
Мне нравится этот вопрос ... Я посмотрю, смогу ли я найти ответ ... Вероятно, пройдет еще несколько часов, прежде чем я смогу помочь снова, я надеюсь, что другие участники SuperUser найдут вам ответ вовремя через ...
wizlog
Мне тоже нравится этот вопрос. Но я не вижу другого способа приблизиться к этому, кроме использования макроса. Я надеюсь, что кто-то докажет, что я не прав.
Ellesa

Ответы:

15

Вот макрос, который создает условный формат для каждой строки в вашем выборе. Это делается путем копирования формата первой строки в КАЖДУЮ строку в выборе (один за другим, не полностью). Замените B1: P1 ссылкой на первую строку в вашей таблице данных.

Sub NewCF()
    Range("B1:P1").Copy
    For Each r In Selection.Rows
        r.PasteSpecial (xlPasteFormats)
    Next r
    Application.CutCopyMode = False
End Sub

Чтобы использовать, выделите неформатированные строки в вашем наборе данных (в моем случае, B2: P300 ), а затем запустите макрос. В приведенном ниже примере обратите внимание, что максимальные числа в первых двух строках равны 5 и 15 соответственно; обе клетки темно-красные .

Я уверен, что есть более быстрое решение, чем это, хотя.

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

Ellesa
источник
1
Спасибо, это сработало прекрасно. Это также отличный пример того, как полезно обращаться за помощью, когда вы не уверены ... Идея использования макроса меня пугает, так как я решил, что мне нужно научиться устанавливать условное форматирование с нуля. Получить макрос просто для копирования существующего форматирования гораздо хитрее :)
Майкл Пейви,
@MichaelPavey Рад, что смог помочь! И добро пожаловать в Superuser! :)
Ellesa
1
+ 1. Если кому-то интересно, я продолжил эту концепцию в своем блоге: yoursumbuddy.com/conditional-formatting-per-row-color-scales
Дуг Глэнси
Смешно, что такого рода вещи не встроены в Excel как функция. Необычно ли сравнивать строки таким образом?
Алекс
5

Самый простой способ сделать это с помощью копирования / вставки постепенно. Сначала отформатируйте 1 строку так, как вы хотите. Затем скопируйте и пропустите форматирование ТОЛЬКО во второй строке. Теперь скопируйте ОБА строки 1 и 2 и вставьте форматирование в строки 3 и 4. Промойте и повторите, скопируйте 4, затем 4, скопируйте 8, вставьте 8, скопируйте 16, вставьте 16. Как только вы получите приличное количество, например 16, вставьте его несколько раз, чтобы получить 64 или 128. Затем вы можете скопировать их и вставить их форматирование, и вы экспоненциально охватите больше территории, чем раньше.

Это не элегантно, и, по моему опыту, ресурсы, необходимые для условного форматирования начала строки, максимизируются примерно до 2500 строк ... но его работа выполнена.

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

Poultron
источник
Я думаю, что OP сказал: «Однако у меня есть 300 строк, и это займет слишком много времени, чтобы выбрать каждую строку отдельно и установить условное форматирование». в вопросе
Прасанна
@Poultron, спасибо! Чтобы добавить к этому: Используя Ctrl / Cmd + Shift + Up / right, вы можете легко выбрать все предыдущие строки и столбцы, поэтому вам не нужно считать предыдущие строки. Затем, когда вы будете готовы вставить, просто поместите курсор в первую ячейку под уже отформатированными строками и только в специальный формат вставки, он расширится, чтобы охватить столько строк, сколько было скопировано. Ctrl / Cmd + Shift + V также запомнит последнюю специальную вставку, которую вы хотите использовать, поэтому весь процесс проходит довольно быстро. Просто использовал его на двух таблицах по 600 строк в каждой.
Оскар Остегард
Я сделал это на столе с ~ 100 строками, и это работало прекрасно. Только взял 7 итераций Format Painter.
mskfisher
0

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

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

Это не одноразовая сделка, как в приведенном выше коде, но она экспоненциально быстрее, чем выполнение одной строки за раз. Надеюсь это поможет.

Крис С
источник
0

Вы также можете применить форматирование условия к одной строке. Снова выделите строку и дважды щелкните «Формат по образцу», чтобы заблокировать ее. Используйте клавишу со стрелкой вниз, чтобы применить условие вниз к другим строкам.

Для моей компании обычно блокирует макрос в Excel, так что это работает для меня. надеюсь, это вам тоже поможет.

GENX
источник