11

У меня есть таблица с примерно 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

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

3 ответа3

11

Вот макрос, который создает условный формат для каждой строки в вашем выборе. Это делается путем копирования формата первой строки в КАЖДУЮ строку в выборе (один за другим, не полностью). Замените 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 соответственно; обе клетки темно-красные.

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

4

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

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

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .