Если цвет ячейки желтый то excel vba

1 / 1 / 0

Регистрация: 12.02.2017

Сообщений: 52

1

Добавить текст ячейки в зависимости от цвета ячейки

12.02.2017, 12:30. Показов 8214. Ответов 16


Студворк — интернет-сервис помощи студентам

Здравствуйте. Я не могу разобраться в написании формулы или макроса.
В определенном диапазоне ячеек требуется: в зависимости от цвета ячейки добавить текст с названием цвета в ячейку справа.
Количество цветов ячеек ограниченно.
То есть, если ячейка желтого цвета, то в ячейке справа должен появиться текст «желтый», если красного -«красный».

Нужен код для VBA excel.
HELP ME!!!



0



aequit

223 / 134 / 45

Регистрация: 08.09.2012

Сообщений: 283

Записей в блоге: 1

12.02.2017, 14:22

2

Visual Basic
1
if Range("A1").Interior.Color = 65535 Then Range("B1").Value = "Желтый"

Файл нужно прикладывать со своими наработками, что не получилось…
Почему именно VBA? Условным форматированием может удобнее было-бы…



0



Xiaohny

1 / 1 / 0

Регистрация: 12.02.2017

Сообщений: 52

13.02.2017, 11:46

 [ТС]

3

в ячейке D9 находиться пример цвета.

Visual Basic
1
2
3
4
5
Public Function examV(DataRange As Range)
     
     If DataRange.Interior.Color = Range("D9").Interior.Color Then Range("B1").Value = "желтый"
     
 End Function

Добавлено через 17 часов 20 минут

Цитата
Сообщение от aequit
Посмотреть сообщение

Visual Basic
1
if Range("A1").Interior.Color = 65535 Then Range("B1").Value = "Желтый"

Файл нужно прикладывать со своими наработками, что не получилось…
Почему именно VBA? Условным форматированием может удобнее было-бы…

Разве можно задать в словном форматировании условие определения цвета?
Формула, прикрепленная выше не работает, что может быть неправильным?



0



223 / 134 / 45

Регистрация: 08.09.2012

Сообщений: 283

Записей в блоге: 1

13.02.2017, 14:40

4

Да, условным форматированием данную задачу нельзя сделать (или я не знаю как)…

Вариант условия из первого поста «если ячейка желтого цвета, то в ячейке справа должен появиться текст «желтый», если красного -«красный» можно реализовать циклом по ячейкам из диапазона «справа» и в зависимости от результата в ячейках «слева» писать текст. Для этого в коде нужно запрограммировать соответствие 65535 = «Желтый» и т.д. Например, используя Select Case.
Прикладываю файл, там номера и названия цветов, может пригодится. Поэкспериментировал с цветами, формулой, как Вы хотели, не получается.
Больше мыслей нет.



0



Xiaohny

1 / 1 / 0

Регистрация: 12.02.2017

Сообщений: 52

13.02.2017, 16:33

 [ТС]

5

Изменил формулу, в результате в ячейке результат «#ЗНАЧ!»
Подозреваю, что неправильно указываю тип переменной, т.к. при использовании формулы цвета из ячеек D9 и D10, то результат #ЗНАЧ!, иначе пустая ячейка.
Что может быть не так в моей формуле?

Visual Basic
1
2
3
4
5
6
Public Function examV1(DataRange As Range, DataRange2 As Range) As String
 
     If DataRange.Interior.Color = Range("D9").Interior.Color Then DataRange2.Value = "желтый"
     If DataRange.Interior.Color = Range("D10").Interior.Color Then DataRange2.Value = "красный"
     
 End Function

Вложения

Тип файла: xlsx color-vba-2017.xlsm.xlsx (9.4 Кб, 14 просмотров)



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

13.02.2017, 16:38

6

Цитата
Сообщение от Xiaohny
Посмотреть сообщение

Что может быть не так в моей формуле?

А функции-то и нет.



0



1 / 1 / 0

Регистрация: 12.02.2017

Сообщений: 52

13.02.2017, 16:40

 [ТС]

7

Прикрепить файл с макросом не могу, пардоньте



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

13.02.2017, 16:51

8

заархивируйте тогда прицепится.



0



1 / 1 / 0

Регистрация: 12.02.2017

Сообщений: 52

13.02.2017, 16:54

 [ТС]

9

Готово.
Функция examV1



0



Vlad999

3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

13.02.2017, 16:58

10

Лучший ответ Сообщение было отмечено Xiaohny как решение

Решение

для начала так. файл не смотрел

Visual Basic
1
2
3
4
5
6
Public Function examV1(DataRange As Range) As String
 
     If DataRange.Interior.Color = Range("D9").Interior.Color Then examV1 = "æåëòûé"
     If DataRange.Interior.Color = Range("D10").Interior.Color Then examV1 = "êðàñíûé"
     
 End Function



2



1 / 1 / 0

Регистрация: 12.02.2017

Сообщений: 52

13.02.2017, 17:19

 [ТС]

11

Работает, спасибо!



0



aequit

223 / 134 / 45

Регистрация: 08.09.2012

Сообщений: 283

Записей в блоге: 1

13.02.2017, 17:20

12

Так тоже можно функцию сделать без создания вспомогательных ячеек. Циферки кодов цветов я выше в файле кидал

Visual Basic
1
2
3
4
5
6
Public Function examV1(DataRange As Range) As String
   Select Case DataRange.Interior.Color
     Case Is = 65535: examV1 = "Желтый"
     Case Is = 255: examV1 = "Красный"
   End Select
 End Function



0



Xiaohny

1 / 1 / 0

Регистрация: 12.02.2017

Сообщений: 52

14.02.2017, 15:21

 [ТС]

13

Функция работает только при вводе вручную, но при автозаполнении результатов не дает.
В чем может быть проблема?

Visual Basic
1
2
3
4
5
6
Public Function examV2(DataRange As Range, DataRange1 As Range)
 
     If DataRange = "желтый" Then DataRange1.Interior.Color = Range("D9").Interior.Color
     If DataRange = "красный" Then DataRange1.Interior.Color = Range("D10").Interior.Color
     
 End Function



0



Vlad999

3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

14.02.2017, 16:00

14

добавьте второй строкой

Visual Basic
1
Application.Volatile



0



1 / 1 / 0

Регистрация: 12.02.2017

Сообщений: 52

14.02.2017, 16:27

 [ТС]

15

Не работает



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

14.02.2017, 17:52

16

вы опять не правильно пишите ф-цию. у вас в ф-ции должна быть строка examV2=….., а у вас её нет.



0



1062 / 506 / 137

Регистрация: 27.02.2013

Сообщений: 1,451

14.02.2017, 19:34

17

Лучший ответ Сообщение было отмечено Xiaohny как решение

Решение

Xiaohny, посмотрите файл.Я когда-то занимался подобной проблемой.Там я привел пример как вам надо используя функции ClosestRGBConstantColorName() и CellColor(),объединив их.
P.S. Названия цветов и их значения вбиваются в соответствующие массивы



2



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

14.02.2017, 19:34

Помогаю со студенческими работами здесь

Изменение цвета строки(ячейки) в зависимости от свойств реквизита спрв
Как в зависимости от свойств реквизита справочника,документа,ячейки таблицы значений можно…

Изменение цвета ячейки в таблице Excel в зависимости от сегодняшней даты
День добрый!! Подскажите пожалуйста, как настроить таблицу Эксель, что бы менялся цвет ячейки в…

Как задать значение для ячейки в зависимости от значения другой ячейки
Здравствуйте! Подскажите, как задать значение для ячейки в зависимости от значения другой ячейки….

Изменения формата ячейки Excel средствами VBA в зависимости от значения другой ячейки
Здравствуйте.
Столкнулся с проблемой. Необходимо на листе Excel Залить, предположим, ячейку "C4"…

Перенесение результатов ячейки в ячейку на другой лист, в зависимости от значения исходной ячейки
Добрый день, — прошу помощи экспертов! Есть такая таблица (в вложении).
Суть вопроса такова:
Есть…

Изменения формата ячейки в зависимости от значения другой ячейки
Здравствуйте, помогите решить такой вопрос.

Задача, которая в принципе решается средствами…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

17

Вычисления по цвету ячеек

Помечать ячейки цветом, используя заливку или цвет шрифта, очень удобно и наглядно. Если вы не дальтоник, конечно :) Трудности возникают тогда, когда по такой раскрашенной таблице возникает необходимость сделать отчет. И если фильтровать и сортировать по цвету Excel в последних версиях научился, то суммировать по цвету до сих пор не умеет.

Чтобы исправить этот существенный недостаток можно использовать несложные пользовательские макрофункции на Visual Basic, которые позволят нам суммировать/подсчитывать количество/среднее арифметическое ячеек с определенным цветом заливки/шрифта.

На вкладке Разработчик (Developer) нажмите кнопку Visual Basic или сочетание клавиш Alt+F11, чтобы открыть редактор макросов. Если такой вкладки у вас не видно, то включите ее в настройках Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon).

В окне редактора вставьте новый модуль через меню Insert — Module и скопируйте туда текст следующих функций:

Function CountByColor(DataRange As Range, ColorSample As Range) As Long
    Dim cell As Range, n As Long
    
    For Each cell In DataRange
        If cell.Interior.Color = ColorSample.Interior.Color Then n = n + 1
    Next cell
    CountByColor = n
End Function

Function SumByColor(DataRange As Range, ColorSample As Range) As Double
    Dim cell As Range, total As Double
    
    For Each cell In DataRange
        If IsNumeric(cell) And cell.Interior.Color = ColorSample.Interior.Color Then total = total + cell.Value
    Next cell
    SumByColor = total
End Function

Function AverageByColor(DataRange As Range, ColorSample As Range) As Double
    Dim cell As Range, total As Double, n As Long
    
    For Each cell In DataRange
        If IsNumeric(cell) And cell.Interior.Color = ColorSample.Interior.Color Then
            total = total + cell.Value
            n = n + 1
        End If
    Next cell
    AverageByColor = total / n
End Function
 

Как легко сообразить, первая функция здесь вычисляет количество ячеек с заданным цветом заливки, вторая — сумму, а третья — среднее арифметическое. У всех функций два аргумента:

  • DataRange — диапазон исходных ячеек с числами, раскрашенных в разные цвета
  • ColorSample — ячейка, цвет заливки которой мы берём за образец

Если теперь вернуться в Excel, то в Мастере функций (вкладка Формулы — кнопка Вставить функцию) в появившейся там категории Определенные пользователем (User Defined) можно найти наши функции и вставить их на лист. Либо напрямую ввести их в строку формул, как любые другие функции Excel:

Сумма, количество и среднее ячеек с заданным цветом заливки

Добавление условий

Аналогичный подход можно легко масштабировать, добавляя, при необходимости, дополнительные условия в проверку (команда if … then…). Так, например, если нам нужно при вычислении среднего арифметического учитывать не только цвет заливки, но и цвет шрифта (т.е. считать не просто жёлтые, а именно жёлто-красные ячейки), то код нашей макро-функции будет выглядеть так:

 Function AverageByColor2(DataRange As Range, ColorSample As Range) As Double
    Dim cell As Range, total As Double, n As Long
    
    For Each cell In DataRange
        If IsNumeric(cell) And cell.Interior.Color = ColorSample.Interior.Color And cell.Font.Color = ColorSample.Font.Color Then
            total = total + cell.Value
            n = n + 1
        End If
    Next cell
    AverageByColor2 = total / n
End Function

Разница только в добавленном через логическую связку «И» (and) условии на проверку соответствия цвета шрифта очередной проверяемой ячейки cell.Font.Color цвету шрифта ячейки-образца ColorSample.Font.Color.

Ограничения и нюансы пересчёта

У созданных нами макрофункций есть 2 важных нюанса.

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

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

Полностью решить эту проблему невозможно, но есть несколько способов её обойти:

  • Сделать двойной щелчок левой кнопкой мыши по ячейки с нашей формулой и нажать на Enter, т.е. имитировать повторный ввод функции в ячейку — Excel её заново пересчитает и выдаст обновленный результат.
  • Можно использовать сочетание клавиш Ctrl+Alt+F9, которое принудительно заставит Excel пересчитать всё формулы и функции независимо от того, изменились ли для них исходные данные. Но это сочетание нужно будет не забывать нажимать каждый раз при изменении исходных данных.
  • Добавить в код наших макрофункций (в любое место) команду Application.Volatile True. Эта команда языка Visual Basic заставляет Excel пересчитывать результаты нашей функции при изменении любой ячейки на листе (или по нажатию  F9). Однако, в этом случае, скорость работы наших функций заметно снизится, т.к. их пересчёт будет происходить постоянно — даже когда мы не меняли цвета или значения ячеек в исходных данных. Пользуйтесь этим методом осторожно.

И помните о том, что наша функция перебирает все (и пустые тоже) ячейки в диапазоне DataRange и не задавайте в качестве первого аргумента целый столбец — «думать» будет долго :)

Ссылки по теме

  • Сортировка строк по цвету
  • Функции подсчета количества и суммы ячеек по цвету из надстройки PLEX
  • Что такое «ад условного форматирования» и как его победить

Заливка ячейки цветом в VBA Excel. Фон ячейки. Свойства .Interior.Color и .Interior.ColorIndex. Цветовая модель RGB. Стандартная палитра. Очистка фона ячейки.

Свойство .Interior.Color объекта Range

Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом (зарисовки, добавления, изменения фона) является использование свойства .Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).

Заливка ячейки цветом в VBA Excel

Пример кода 1:

Sub ColorTest1()

Range(«A1»).Interior.Color = 31569

Range(«A4:D8»).Interior.Color = 4569325

Range(«C12:D17»).Cells(4).Interior.Color = 568569

Cells(3, 6).Interior.Color = 12659

End Sub

Поместите пример кода в свой программный модуль и нажмите кнопку на панели инструментов «Run Sub» или на клавиатуре «F5», курсор должен быть внутри выполняемой программы. На активном листе Excel ячейки и диапазон, выбранные в коде, окрасятся в соответствующие цвета.

Есть один интересный нюанс: если присвоить свойству .Interior.Color отрицательное значение от -16777215 до -1, то цвет будет соответствовать значению, равному сумме максимального значения палитры (16777215) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:

Sub ColorTest11()

Cells(1, 1).Interior.Color = 12207890

Cells(2, 1).Interior.Color = 16777215 + (12207890)

Cells(3, 1).Interior.Color = 4569325

End Sub

Проверено в Excel 2016.

Вывод сообщений о числовых значениях цветов

Числовые значения цветов запомнить невозможно, поэтому часто возникает вопрос о том, как узнать числовое значение фона ячейки. Следующий код VBA Excel выводит сообщения о числовых значениях присвоенных ранее цветов.

Пример кода 2:

Sub ColorTest2()

MsgBox Range(«A1»).Interior.Color

MsgBox Range(«A4:D8»).Interior.Color

MsgBox Range(«C12:D17»).Cells(4).Interior.Color

MsgBox Cells(3, 6).Interior.Color

End Sub

Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как Long.

Использование предопределенных констант

В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:

Предопределенная константа Наименование цвета
vbBlack Черный
vbBlue Голубой
vbCyan Бирюзовый
vbGreen Зеленый
vbMagenta Пурпурный
vbRed Красный
vbWhite Белый
vbYellow Желтый
xlNone Нет заливки

Присваивается цвет ячейке предопределенной константой в VBA Excel точно так же, как и числовым значением:

Пример кода 3:

Range(«A1»).Interior.Color = vbGreen

Цветовая модель RGB

Цветовая система RGB представляет собой комбинацию различных по интенсивности основных трех цветов: красного, зеленого и синего. Они могут принимать значения от 0 до 255. Если все значения равны 0 — это черный цвет, если все значения равны 255 — это белый цвет.

Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:

Палитра Excel

Палитра Excel

Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений RGB, их необходимо перевести в десятичное число, обозначающее цвет. Для этого существует функция VBA Excel, которая так и называется — RGB.

Пример кода 4:

Range(«A1»).Interior.Color = RGB(100, 150, 200)

Список стандартных цветов с RGB-кодами смотрите в статье: HTML. Коды и названия цветов.

Очистка ячейки (диапазона) от заливки

Для очистки ячейки (диапазона) от заливки используется константа xlNone:

Range(«A1»).Interior.Color = xlNone

Свойство .Interior.ColorIndex объекта Range

До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства .Interior.ColorIndex:

Пример кода 5:

Range(«A1»).Interior.ColorIndex = 8

MsgBox Range(«A1»).Interior.ColorIndex

Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:

Пример кода 6:

Sub ColorIndex()

Dim i As Byte

For i = 1 To 56

Cells(i, 1).Interior.ColorIndex = i

Next

End Sub

Номера строк активного листа от 1 до 56 будут соответствовать индексу цвета, а ячейка в первом столбце будет залита соответствующим индексу фоном.

Подробнее о стандартной палитре Excel смотрите в статье: Стандартная палитра из 56 цветов, а также о том, как добавить узор в ячейку.


Использование условия if, для закрашенной ячейки

KaminoontY

Дата: Понедельник, 08.10.2018, 13:31 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Здравствуйте.
Я новичок как в использовании VBA, так и на самом форме. Извиняюсь, если где то выразился некорректно.
Часть задачи, которую я пытаюсь решить заключается в следующих пунктах:
1) Пройтись по строкам, которые заполненные данными
2) При помощи условия if определить закрашена ли ячейка в желтый или синий цвета
(Диапазон ячеек в строке закрашивается
в желтый согласно номеру введённой строки, при помощи

Код

b = InputBox(«Введите номер строки»)

в синий, согласна некому условию. В совокупности желтая строка с набором синих строк является отобранным блоком данных (рис .1.).

3) При определении незакрашенной строки, начать выполнения макроса с отбора следующего блока данных, т.е. закрашивания строки в желтый и подбору к ней строк в соответствии с неким условием попутно закрашивая их в синий, но при этом избегая уже использованных данных.
4) Отобранный блок данных копируется на отдельную страницу, в то время как поиск блоком данных продолжается.
Конкретно меня интересует, можно ли при помощи условия if отследить ячейки по цвету, т.е. пункт 2.

Благодарю за информацию, также прилагаю пример данной задачи, где мне необходимо добавить условие из пункта 2.
[vba]

Код

Sub Ф1()

Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long

‘строки’
‘1’
b = InputBox(«Введите номер строки»)
‘2’
d = 8

‘определение последней заполненной ячеки’

f = Sheets(«Ф1»).UsedRange.Row + Sheets(«Ф1»).UsedRange.Rows.Count — 1

LastRow1 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)

Sheets(«Ф1»).Range(Cells(b, 1), Cells(b, 17)).Copy Sheets(«1»).Cells(LastRow1, 1)

For x% = 1 To f

If Not b = d Then

N_nd = Abs(Cells(b, 3) — Cells(d, 3))

N_vd = Abs(Cells(b, 4) — Cells(d, 4))

N_ct1 = Abs(Cells(b, 5) — Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) — Cells(d, 6))

N_ct3 = Abs(Cells(b, 5) — Cells(b, 6))

N_ct4 = Abs(Cells(d, 5) — Cells(d, 6))

Tg_ct1 = Abs(Cells(b, 9) — Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) — Cells(d, 15))

Tg_ct3 = Abs(Cells(b, 9) — Cells(b, 15))

Tg_ct4 = Abs(Cells(d, 9) — Cells(d, 15))

Tvh_OK = Abs(Cells(b, 10) — Cells(d, 10))

Pza_KVD = Abs(Cells(b, 13) — Cells(d, 13))

LastRow2 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1

If N_nd <= Cells(5, 36) _
And N_ct1 <= Cells(6, 36) _
And N_ct2 <= Cells(6, 36) _
And N_ct3 <= Cells(6, 36) _
And N_ct4 <= Cells(6, 36) _
And Tg_ct1 <= Cells(7, 36) _
And Tg_ct2 <= Cells(7, 36) _
And Tg_ct3 <= Cells(7, 36) _
And Tg_ct4 <= Cells(7, 36) _
And Tvh_OK <= Cells(8, 36) _
And Pza_KVD <= Cells(9, 36) _
And N_vd <= Cells(10, 36) Then

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)

Range(Cells(d, 1), Cells(d, 17)).Interior.Color = RGB(100, 150, 200)

Sheets(«Ф1»).Range(Cells(d, 1), Cells(d, 17)).Copy Sheets(«1»).Cells(LastRow2, 1)

   Else

End If

d = d + 1

Else

d = d + 1

End If

LastRow2 = LastRow2 + 1

Next x

LastRow1 = LastRow1 + 1

b = b + 1

End Sub

[/vba]

Сообщение отредактировал KaminoontYПонедельник, 08.10.2018, 13:33

 

Ответить

_Boroda_

Дата: Понедельник, 08.10.2018, 13:41 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

можно ли при помощи условия if отследить ячейки по цвету

Вы про вот так?
[vba]

Код

If Cells(1, 1).Interior.Color = 65535 Then

[/vba]

Вместо Cells(1, 1) — Ваша ячейка


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

KaminoontY

Дата: Понедельник, 08.10.2018, 18:46 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

_Boroda_, да скорее всего так, буду пробовать. Спасибо.

 

Ответить

KaminoontY

Дата: Понедельник, 08.10.2018, 19:19 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

_Boroda_, Данный вариант не подошел, так как складывается впечатление, что [vba]

Код

If Cells(1, 1).Interior.Color = 65535 Then

[/vba] не проверяет условие закрашена ли ячейка в цвет «65535». Попробовал подставить в свой код, однако все ячейки просто закрашиваются в желтый, не зависимо от того были ли они закрашены ранее.
[vba]

Код

Sub Ф1()

Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long

‘строки’
‘1’
b = InputBox(«Введите номер строки»)
‘2’
d = 8

‘смена цвета режимов от 1-56’

‘определение последней заполненной ячеки’

f = Sheets(«Ф1»).UsedRange.Row + Sheets(«Ф1»).UsedRange.Rows.Count — 1

LastRow1 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1

For n% = 1 To f

If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then

Range(Cells(b, 1), Cells(b, 17)).Interior.Color = 65535

Sheets(«Ф1»).Range(Cells(b, 1), Cells(b, 17)).Copy Sheets(«1»).Cells(LastRow1, 1)

For x% = 1 To f

If Not Cells(d, 1).Interior.Color = 60000 Or Cells(d, 1).Interior.Color = 6553 Then

If Not b = d Then

N_nd = Abs(Cells(b, 3) — Cells(d, 3))

N_vd = Abs(Cells(b, 4) — Cells(d, 4))

N_ct1 = Abs(Cells(b, 5) — Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) — Cells(d, 6))

N_ct3 = Abs(Cells(b, 5) — Cells(b, 6))

N_ct4 = Abs(Cells(d, 5) — Cells(d, 6))

Tg_ct1 = Abs(Cells(b, 9) — Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) — Cells(d, 15))

Tg_ct3 = Abs(Cells(b, 9) — Cells(b, 15))

Tg_ct4 = Abs(Cells(d, 9) — Cells(d, 15))

Tvh_OK = Abs(Cells(b, 10) — Cells(d, 10))

Pza_KVD = Abs(Cells(b, 13) — Cells(d, 13))

LastRow2 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1

If N_nd <= Cells(5, 36) _
And N_ct1 <= Cells(6, 36) _
And N_ct2 <= Cells(6, 36) _
And N_ct3 <= Cells(6, 36) _
And N_ct4 <= Cells(6, 36) _
And Tg_ct1 <= Cells(7, 36) _
And Tg_ct2 <= Cells(7, 36) _
And Tg_ct3 <= Cells(7, 36) _
And Tg_ct4 <= Cells(7, 36) _
And Tvh_OK <= Cells(8, 36) _
And Pza_KVD <= Cells(9, 36) _
And N_vd <= Cells(10, 36) Then

Range(Cells(d, 1), Cells(d, 17)).Interior.Color = 60000

Sheets(«Ф1»).Range(Cells(d, 1), Cells(d, 17)).Copy Sheets(«1»).Cells(LastRow2, 1)

   Else
End If

Else
End If

Else
End If
d = d + 1
LastRow2 = LastRow2 + 1

Next x

Else
End If

LastRow1 = LastRow1 + 1

b = b + 1

Next n

End Sub

[/vba]
Существует ли как нибудь другой способ отбросить использованные данные, чтобы продолжит отбор из оставшихся?

Сообщение отредактировал KaminoontYПонедельник, 08.10.2018, 19:22

 

Ответить

_Boroda_

Дата: Понедельник, 08.10.2018, 19:44 |
Сообщение № 5

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Так у Вас же у самого написано
[vba]

Код

If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then
            Range(Cells(b, 1), Cells(b, 17)).Interior.Color = 65535

[/vba]
— если ячейка не желтая и не 60000 (заметьте, у синего код не 60000, а 16777215), то крась все в желтый. Вот он и красит

* Добавлено
Абсолютно согласен с двумя последующими ораторами


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Сообщение отредактировал _Boroda_Понедельник, 08.10.2018, 20:30

 

Ответить

Апострофф

Дата: Понедельник, 08.10.2018, 20:20 |
Сообщение № 6

Группа: Проверенные

Ранг: Обитатель

Сообщений: 416


Репутация:

117

±

Замечаний:
0% ±


Excel 1997

— если ячейка не желтая и не 60000

интуитивно (и по опыту) в примере
[vba]

Код

If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then

[/vba]
написано:

Цитата

если ячейка не желтая или равна 60000 то

 

Ответить

RAN

Дата: Понедельник, 08.10.2018, 20:24 |
Сообщение № 7

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

If Not Cells(b, 1).Interior.Color = 65535 Or Cells(b, 1).Interior.Color = 60000 Then

Ярко жёлто — синий пример, как делать НЕ надо.
Если ячейка не желтая, то какая разница, или она зеленая, или она фиолетовая (в крапинку)?
Условие уже выполнено.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Авиасимулятор, что же может быть лучше, чем по управлять огромным лайнером, и провести его из одного аэропорта в другой. Авиасимуляторов гражданской авиации довольно немного, среди них Microsoft Flight Simulator X (MFSX), X-Plane и другие, среди которых красуется  FlightGear Flight Simulator . Что его отличает от других ему подобных, это его доступность, симулятор является абсолютно бесплатным. Конечно в нем нет красивых ландшафтов и объектов как в Microsoft Flight Simulator X и X-Plane, но модели самолетов так же достойны внимания. FlightGear Немного расскажу о том, какие нам понадобятся знания для того, что бы совершить полет в FlightGear. Для начала  скачиваем  и устанавливаем последнюю версию игры.  Запускаем. Перед нами меню игры. На вкладке Enviroment  выбираем желаемое время полета. Там же можно выбрать реальное время, но учтите что если вы будите играть вечером, то все полеты будут ночные, по этому для начала ставим лето (summer) и утро или день (morning). На в

В этой статье говорится об автоматическом изменении значения ячейки в зависимости от цвета фона в Excel. Например, если выделенные ячейки заполняются красным цветом фона, заполните эти ячейки номером 1, а для ячеек с синим цветом фона заполните номер 0.

Изменить значение в зависимости от цвета ячейки с кодом VBA


Изменить значение в зависимости от цвета ячейки с кодом VBA

Вы можете запустить приведенный ниже код VBA, чтобы изменить значение в зависимости от цвета ячейки в Excel. Пожалуйста, сделайте следующее.

1. Выберите диапазон, в котором вам нужно изменить значения в зависимости от цвета фона, затем нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.

Код VBA: изменение значения в зависимости от цвета ячейки в Excel

Sub ChangeValueBasedOnCellColor()
    Dim rg As Range
    Dim xRg As Range
    Set xRg = Selection.Cells
    Application.DisplayAlerts = False
    For Each rg In xRg
        With rg
            Select Case .Interior.Color
                Case Is = 255 'Red
                    .Value = 1
                Case Is = 15773696 'Blue
                    .Value = 0
            End Select
        End With
    Next
    Application.DisplayAlerts = False
End Sub

3. нажмите F5 Чтобы запустить код, вы увидите, что все красные ячейки в выбранном диапазоне заполнены цифрой 1, а синие ячейки заполнены цифрой 0, как показано на скриншоте ниже.

 


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (11)


Оценок пока нет. Оцените первым!

Содержание

  • Условное форматирование Excel
  • Условное форматирование в VBA
  • Практическое использование условного форматирования в VBA
  • Простой пример создания условного формата для диапазона

Условное форматирование Excel позволяет определять правила, определяющие форматирование ячеек.

Например, вы можете создать правило, выделяющее ячейки, соответствующие определенным критериям. Примеры включают:

  • Числа, попадающие в определенный диапазон (например, меньше 0).
  • 10 первых пунктов списка.
  • Создание «тепловой карты».
  • «Формульные» правила практически для любого условного форматирования.

В Excel условное форматирование можно найти на ленте в разделе Главная> Стили (ALT> H> L).

Чтобы создать собственное правило, нажмите «Новое правило», и откроется новое окно:

Условное форматирование в VBA

Доступ ко всем этим функциям условного форматирования можно получить с помощью VBA.

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

Правила условного форматирования также сохраняются при сохранении рабочего листа.

Правила условного форматирования применяются конкретно к определенному листу и определенному диапазону ячеек. Если они нужны где-то еще в книге, то они также должны быть настроены на этом листе.

Практическое использование условного форматирования в VBA

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

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

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

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

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

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

Простой пример создания условного формата для диапазона

В этом примере настраивается условное форматирование для диапазона ячеек (A1: A10) на листе. Если число в диапазоне от 100 до 150, то цвет фона ячейки будет красным, в противном случае он не будет иметь цвета.

1234567891011121314 Sub ConditionalFormattingExample ()‘Определить диапазонDim MyRange As RangeУстановите MyRange = Range («A1: A10»)‘Удалить существующее условное форматирование из диапазонаMyRange.FormatConditions.Delete‘Применить условное форматированиеMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)Конец подписки

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

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

Цвета представлены числовыми значениями. Для этого рекомендуется использовать обозначение RGB (красный, зеленый, синий). Для этого можно использовать стандартные цветовые константы, например. vbRed, vbBlue, но вы можете выбрать один из восьми цветов.

Доступно более 16,7 млн ​​цветов, и с помощью RGB можно получить доступ ко всем. Это намного проще, чем пытаться вспомнить, какое число соответствует какому цвету. Каждый из трех номеров цветов RGB составляет от 0 до 255.

Обратите внимание, что параметр «xlBetween» является включительным, поэтому значения ячеек 100 или 150 будут удовлетворять условию.

Многовариантное форматирование

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

12345678910111213141516171819 Sub MultipleConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить первое правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)’Добавить второе правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlLess, _Formula1: = «= 100″MyRange.FormatConditions (2) .Interior.Color = vbBlue’Добавить третье правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlGreater, _Formula1: = «= 150″MyRange.FormatConditions (3) .Interior.Color = vbYellowКонец подписки

В этом примере устанавливается первое правило, как и раньше, с красным цветом ячейки, если значение ячейки находится в диапазоне от 100 до 150.

Затем добавляются еще два правила. Если значение ячейки меньше 100, то цвет ячейки синий, а если больше 150, то цвет ячейки желтый.

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

Если в этом диапазоне находятся пустые ячейки, они будут отображаться синим цветом, потому что Excel по-прежнему считает их имеющими значение меньше 100.

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

1234567891011121314151617181920212223 Sub MultipleConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить первое правилоMyRange.FormatConditions.Add Тип: = xlExpression, Formula1: = _»= LEN (TRIM (A1)) = 0″MyRange.FormatConditions (1) .Interior.Pattern = xlNone’Добавить второе правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (2) .Interior.Color = RGB (255, 0, 0)’Добавить третье правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlLess, _Formula1: = «= 100″MyRange.FormatConditions (3) .Interior.Color = vbBlue’Добавить четвертое правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlGreater, _Formula1: = «= 150″MyRange.FormatConditions (4) .Interior.Color = RGB (0, 255, 0)Конец подписки

При этом используется тип xlExpression, а затем используется стандартная формула Excel, чтобы определить, является ли ячейка пустой, а не числовым значением.

Объект FormatConditions является частью объекта Range. Он действует так же, как коллекция с индексом, начинающимся с 1. Вы можете перебирать этот объект, используя цикл For… Next или For… Each.

Удаление правила

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

12345678910111213 Sub DeleteConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить первое правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)’Удалить правилоMyRange.FormatConditions (1) .DeleteКонец подписки

Этот код создает новое правило для диапазона A1: A10, а затем удаляет его. Вы должны использовать правильный номер индекса для удаления, поэтому проверьте «Управление правилами» в интерфейсе Excel (это покажет правила в порядке выполнения), чтобы убедиться, что вы получили правильный номер индекса. Обратите внимание, что в Excel нет возможности отмены, если вы удаляете правило условного форматирования в VBA, в отличие от того, если вы делаете это через интерфейс Excel.

Изменение правила

Поскольку правила представляют собой набор объектов на основе указанного диапазона, вы можете легко вносить изменения в определенные правила с помощью VBA. Фактические свойства после добавления правила доступны только для чтения, но вы можете использовать метод Modify для их изменения. Доступны для чтения / записи такие свойства, как цвета.

123456789101112131415 Sub ChangeConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить первое правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)’Изменить правилоMyRange.FormatConditions (1) .Modify xlCellValue, xlLess, «10»‘Изменить цвет правилаMyRange.FormatConditions (1) .Interior.Color = vbGreenКонец подписки

Этот код создает объект диапазона (A1: A10) и добавляет правило для чисел от 100 до 150. Если условие истинно, цвет ячейки меняется на красный.

Затем код изменяет правило на числа меньше 10. Если условие истинно, цвет ячейки теперь меняется на зеленый.

Использование градуированной цветовой схемы

Условное форматирование Excel позволяет использовать градуированные цвета для диапазона чисел, идущих в возрастающем или убывающем порядке.

Это очень полезно, когда у вас есть данные, такие как данные о продажах по географическим регионам, температурам в городах или расстояниям между городами. Используя VBA, вы получаете дополнительное преимущество, заключающееся в возможности выбирать собственную градуированную цветовую схему вместо стандартных, предлагаемых в интерфейсе Excel.

1234567891011121314151617181920212223242526272829 Sub GraduatedColors ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Определить тип шкалыMyRange.FormatConditions.AddColorScale ColorScaleType: = 3’Выберите цвет для наименьшего значения в диапазонеMyRange.FormatConditions (1) .ColorScaleCriteria (1) .Type = _xlConditionValueLowestValueС MyRange.FormatConditions (1) .ColorScaleCriteria (1) .FormatColor.Color = 7039480.Конец с’Выберите цвет для средних значений в диапазонеMyRange.FormatConditions (1) .ColorScaleCriteria (2) .Type = _xlConditionValuePercentileMyRange.FormatConditions (1) .ColorScaleCriteria (2) .Value = 50’Выберите цвет для средней точки диапазонаС MyRange.FormatConditions (1) .ColorScaleCriteria (2) .FormatColor.Color = 8711167.Конец с’Выберите цвет для максимального значения в диапазонеMyRange.FormatConditions (1) .ColorScaleCriteria (3) .Type = _xlConditionValueHighestValueС MyRange.FormatConditions (1) .ColorScaleCriteria (3) .FormatColor.Color = 8109667.Конец сКонец подписки

Когда этот код запускается, он будет градуировать цвета ячеек в соответствии с возрастающими значениями в диапазоне A1: A10.

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

Условное форматирование значений ошибок

Когда у вас огромный объем данных, вы можете легко пропустить значение ошибки в различных таблицах. Если это будет представлено пользователю без разрешения, это может привести к большим проблемам, и пользователь потеряет уверенность в цифрах. Это использует тип правила xlExpression и функцию Excel IsError для оценки ячейки.

Вы можете создать код, чтобы все ячейки с ошибками имели красный цвет:

1234567891011 Sub ErrorConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить правило ошибкиMyRange.FormatConditions.Add Тип: = xlExpression, Formula1: = «= IsError (A1) = true»‘Установить красный цвет салона.MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)Конец подписки

Условное форматирование дат в прошлом

У вас могут быть импортированные данные там, где вы хотите выделить даты, которые были в прошлом. Примером этого может быть отчет по дебиторам, в котором вы хотите выделить любые старые даты в счетах-фактурах старше 30 дней.

Этот код использует тип правила xlExpression и функцию Excel для оценки дат.

1234567891011 Подложка DateInPastConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазона на основе столбца датУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить правило ошибки для прошлых датMyRange.FormatConditions.Add Тип: = xlExpression, Formula1: = «= Now () — A1> 30″‘Установить красный цвет салона.MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)Конец подписки

Этот код принимает диапазон дат в диапазоне A1: A10 и устанавливает красный цвет ячейки для любой даты, прошедшей более 30 дней.

В формуле, используемой в условии, Now () указывает текущую дату и время. Это будет продолжать пересчитывать каждый раз, когда рабочий лист пересчитывается, поэтому форматирование будет меняться от одного дня к другому.

Использование панелей данных в условном форматировании VBA

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

123456 Sub DataBarFormattingExample ()Dim MyRange As RangeУстановите MyRange = Range («A1: A10»)MyRange.FormatConditions.DeleteMyRange.FormatConditions.AddDatabarКонец подписки

Ваши данные на листе будут выглядеть так:

Использование значков в условном форматировании VBA

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

12345678910111213141516171819202122232425 Sub IconSetsExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить набор иконок в объект FormatConditionsMyRange.FormatConditions.AddIconSetCondition’Установите набор иконок в стрелки — условие 1С MyRange.FormatConditions (1).IconSet = ActiveWorkbook.IconSets (xl3Arrows)Конец с’установить критерии значка для требуемого процентного значения — условие 2С MyRange.FormatConditions (1) .IconCriteria (2).Type = xlConditionValuePercent.Значение = 33.Operator = xlGreaterEqualКонец с’установить критерии значка для требуемого процентного значения — условие 3С MyRange.FormatConditions (1) .IconCriteria (3).Type = xlConditionValuePercent.Значение = 67.Operator = xlGreaterEqualКонец сКонец подписки

Это даст мгновенное представление, показывающее, высокое или низкое число. После запуска этого кода ваш рабочий лист будет выглядеть так:

Использование условного форматирования для выделения пятерки лучших

Вы можете использовать код VBA, чтобы выделить 5 первых чисел в диапазоне данных. Вы используете параметр под названием «AddTop10», но вы можете настроить номер ранга в коде на 5. Пользователь может захотеть увидеть самые высокие числа в диапазоне без предварительной сортировки данных.

1234567891011121314151617181920212223 Sub Top5Example ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить условие Top10MyRange.FormatConditions.AddTop10С MyRange.FormatConditions (1)’Установить параметр сверху вниз.TopBottom = xlTop10Top’Установить только топ 5.Ранг = 5Конец сС MyRange.FormatConditions (1) .Font’Установить цвет шрифта.Color = -16383844.Конец сС MyRange.FormatConditions (1) .Interior’Установить цвет фона ячейки.Color = 13551615Конец сКонец подписки

Данные на вашем листе после запуска кода будут выглядеть так:

Обратите внимание, что значение 145 появляется дважды, поэтому выделяются шесть ячеек.

Значение параметров StopIfTrue и SetFirstPriority

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

По умолчанию для этого параметра установлено значение True, но вы можете изменить его, если хотите, чтобы учитывались все остальные правила для этой ячейки:

1 MyRange. FormatConditions (1) .StopIfTrue = False

Параметр SetFirstPriority указывает, будет ли это правило условия оцениваться первым, если для этой ячейки существует несколько правил.

1 MyRange. FormatConditions (1) .SetFirstPriority

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

Вы можете изменить приоритет правила:

1 MyRange. FormatConditions (1) .Priority = 3

Это изменит относительное положение любых других правил в списке условного формата.

Использование условного форматирования для ссылки на другие значения ячеек

Это то, чего нельзя сделать с помощью условного форматирования Excel. Однако для этого вы можете создать свой собственный код VBA.

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

Следующий код выполнит поиск по вашему списку чисел, отыщет в соседней ячейке форматирование текста, а затем отформатирует число, как требуется:

123456789101112131415161718192021 Sub ReferToAnotherCellForConditionalFormatting ()’Создайте переменные для хранения количества строк для табличных данныхDim Row as long, N as long’Захватить количество строк в диапазоне табличных данныхRRow = ActiveSheet.UsedRange.Rows.Count’Перебрать все строки в диапазоне табличных данныхДля N = 1 в ряд’Используйте оператор Select Case для оценки форматирования на основе столбца 2Выберите Case ActiveSheet.Cells (N, 2) .Value.’Преврати цвет салона в синийКорпус «Синий»ActiveSheet.Cells (N, 1) .Interior.Color = vbBlue’Преврати цвет салона в красныйКейс «Красный»ActiveSheet.Cells (N, 1) .Interior.Color = vbRed’Преврати цвет салона в зеленыйКорпус «Зеленый»ActiveSheet.Cells (N, 1) .Interior.Color = vbGreenКонец ВыбратьСледующий NКонец подписки

После того, как этот код был запущен, ваш рабочий лист теперь будет выглядеть так:

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

Операторы, которые можно использовать в операторах условного форматирования

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

Существует ряд этих операторов, которые можно использовать в зависимости от того, как вы хотите указать критерии правила.

Имя Ценить Описание
xlBetween 1 Между. Может использоваться только при наличии двух формул.
xlEqual 3 Равный.
xlGreater 5 Больше чем.
xlGreaterEqual 7 Больше или равно.
xl Меньше 6 Меньше, чем.
xlLessEqual 8 Меньше или равно.
xlNotBetween 2 Не между. Может использоваться только при наличии двух формул.
xlNotEqual 4 Не равный.

  • Условное форматирование в Excel VBA

Условное форматирование в Excel VBA

В Excel мы все использовали условное форматирование для выделения дублирующихся значений. В основном условное форматирование используется для получения дублированных значений. Мы можем выделить дубликаты значений разными способами. Мы можем выделить дубликаты значений, диапазон конкретных значений, а также определить правило для завершения критериев форматирования. Ниже приведены функции переменных, доступные в разделе «Условное форматирование».

Но что, если мы сможем автоматизировать этот процесс выделения дубликатов или любых других значений в соответствии с нашим требованием. Критерии, которые мы можем определить с помощью условного форматирования в Excel, также могут быть выполнены в VBA. Для применения условного форматирования мы можем выбрать любую ячейку, диапазон которой доступен на листе Excel. Условное форматирование работает только тогда, когда определенные критерии соответствуют требованию. Иначе, это не покажет никакого изменения цвета. С помощью условного форматирования в VBA мы можем изменить цвет любой ячейки или содержимого ячейки, удалить цвет ячейки или удалить цвет. Помимо изменения цвета ячейки, мы можем изменить содержимое ячейки на текст, выделенный жирным шрифтом или курсивом . После этого мы можем отменить все изменения.

Как использовать условное форматирование в Excel VBA?

Ниже приведены различные примеры использования функции условного форматирования в Excel с использованием кода VBA.

Вы можете скачать этот шаблон Excel для условного форматирования VBA здесь — Шаблон Excel для условного форматирования VBA

Условное форматирование VBA — пример № 1

У нас есть данные о некоторых числах и тексте, как показано ниже в столбцах A и B. Теперь мы уже классифицировали цвет, который нам нужно присвоить числу и тексту, который находится в ячейке D2. Мы определили желтый цвет для номера 1 и алфавита A и зеленый цвет для номера 2 и алфавита B.

Хотя условное форматирование VBA может быть реализовано в модуле, но написание кода для условного форматирования на листе заставит код работать только на этом листе. Для этого вместо того, чтобы перейти к опции «Модуль», нажмите на вкладку «Вставка», чтобы вставить модуль.

Шаг 1: Теперь в первом раскрывающемся списке выберите « Рабочий лист», который по умолчанию будет общим, и в раскрывающемся списке «Выбор» он автоматически выберет параметр SelectionChange, как показано ниже.

Шаг 2: Как только мы это сделаем, он автоматически активирует частную подкатегорию, и целевая ячейка будет в диапазоне.

Код:

 Private Sub Worksheet_SelectionChange (цель ByVal в качестве диапазона) End Sub 

Шаг 3: Теперь напишите код, сначала определите переменную MyRange как Range . Или вы можете выбрать любое другое имя вместо MyRange согласно вашему выбору.

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Sub End Sub 

Шаг 4: Используйте Set и выберите определенный диапазон, как показано ниже.

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Range Set MyRange = End Sub 

Шаг 5: После этого выберите Рабочий лист, к которому мы хотим применить условное форматирование. Здесь наш лист Sheet1. Мы можем поставить последовательность также как 1 вместо записи Sheet1. А затем выберите диапазон тех ячеек, которые нам нужно отформатировать. Здесь наш диапазон от ячейки A1 до B8.

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Set Range MyRange = Worksheets ("Sheet1"). Range ("A1: B8") End Sub 

Шаг 6: Теперь откройте цикл For Each-Next, как показано ниже. И начнем с выбора переменной MyRange, определенной в Cell .

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Range Set MyRange = Worksheets ("Sheet1"). Range ("A1: B8") для каждой ячейки в MyRange Next End Sub 

Шаг 7: Теперь снова откройте цикл If-Else.

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Range Set MyRange = Worksheets ("Sheet1"). Range ("A1: B8") для каждой ячейки в MyRange, если End If Next End Sub 

Это регион, в котором мы назначаем цвета всем числам и алфавитам, имеющимся в нашем ассортименте.

Шаг 8: Напишите код, если значение ячейки равно 1, тогда цвет интерьера: выбранная ячейка диапазона от A1 до B8 будет зеленого цвета. А для зеленого у нас есть цветовой код, назначенный ему как 6.

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Range Set MyRange = Worksheets ("Sheet1"). Range ("A1: B8") для каждой ячейки в MyRange, если Cell.Value Like "1", то Cell.Interior.ColorIndex = 6 End If Next End Sub 

Шаг 9: Теперь для значения ячейки номер 2. Иначе, если значение ячейки любой ячейки из выбранного диапазона равно 2, то цвет внутренней части этой ячейки будет желтым. А для желтого у нас есть код цвета, назначенный ему как 4.

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Range Set MyRange = Worksheets ("Sheet1"). Range ("A1: B8") для каждой ячейки в MyRange, если Cell.Value Like "1", то Cell.Interior.ColorIndex = 6 ElseIf Cell.Value Как "2", то Cell.Interior.ColorIndex = 4 End If Next End Sub 

Для каждого цвета у нас есть разные цветовые коды, назначенные им, которые начинаются с 1 до 56. Принимая во внимание, что числовой код 1 назначается черному цвету, а номер 56 назначается темно-серому цвету. Между прочим, у нас есть другие цвета, которые мы можем найти в Microsoft Documents.

Шаг 10: Если что-либо из перечисленного

условие — ЛОЖЬ, тогда у нас будет другое условие, если если значение ячейки равно А, то внутренний цвет ячейки будет Желтым. И для желтого снова мы назначим код как 6.

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Range Set MyRange = Worksheets ("Sheet1"). Range ("A1: B8") для каждой ячейки в MyRange, если Cell.Value Like "1", то Cell.Interior.ColorIndex = 6 ElseIf Cell.Value как «2», затем Cell.Interior.ColorIndex = 4 ElseIf Cell.Value, как «A», то Cell.Interior.ColorIndex = 6 End If Next End Sub 

Шаг 11: Сделайте то же самое для значения ячейки B, с цветовым кодом 4, как зеленый.

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Range Set MyRange = Worksheets ("Sheet1"). Range ("A1: B8") для каждой ячейки в MyRange, если Cell.Value Like "1", то Cell.Interior.ColorIndex = 6 ElseIf Cell.Value Как «2» Тогда Cell.Interior.ColorIndex = 4 ElseIf Cell.Value Как «A» Тогда Cell.Interior.ColorIndex = 6 ElseIf Cell.Value Как «B» Тогда Cell.Interior.ColorIndex = 4 End If Next End Sub 

Шаг 12: Если какое-либо из условий не TRUE, то для Else мы предпочтем выбрать цветовой код как None .

Код:

 Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim MyRange As Range Set MyRange = Worksheets ("Sheet1"). Range ("A1: B8") для каждой ячейки в MyRange, если Cell.Value Like "1", то Cell.Interior.ColorIndex = 6 ElseIf Cell.Value Как «2» Тогда Cell.Interior.ColorIndex = 4 ElseIf Cell.Value Как «A» Тогда Cell.Interior.ColorIndex = 6 ElseIf Cell.Value Как «B» Тогда Cell.Interior.ColorIndex = 4 Else Cell.Ineterios.ColorIndex = xlNone End If Next End Sub 

Шаг 13: Поскольку код большой, для компиляции каждого шага кода нажмите функциональную клавишу F8. Если ошибки не найдены, нажмите кнопку воспроизведения, чтобы запустить весь код за один раз. Мы увидим, что согласно правилу условного форматирования, определенному в коде VBA, цвет ячеек был изменен на выбранные цветовые коды, как показано ниже.

Шаг 14: Это форматирование теперь исправлено. Если мы хотим увидеть изменения в цвете, для теста давайте изменим значение любой ячейки, считая А1 с 1 на 2. Мы увидим, что цвет ячейки А1 меняется на Зеленый.

Это связано с тем, что мы объявили, что в диапазоне от A1 до B8 любая ячейка, содержащая числа 1 и 2 и алфавиты A и B, будет отформатирована в желтый и зеленый цвета, как показано в ячейках D2-E3.

Плюсы и минусы

  • Это дает мгновенный вывод, если у нас есть огромные данные. Принимая во внимание, что если мы применим то же самое из пункта меню Excel, потребуется время, чтобы очистить форматирование для большого набора данных.
  • Мы можем выполнять все типы функций, которые доступны в Excel для условного форматирования в VBA.
  • Не рекомендуется применять условное форматирование VBA для небольшого набора данных.

То, что нужно запомнить

  • Есть много других функций, кроме выделения дубликатов и одинаковых ячеек значений. Мы можем изменить формат ячейки любым способом, таким как полужирный шрифт, текст курсивом, изменение цвета шрифта, изменение цвета фона, выделение значений в некотором определенном диапазоне.
  • После применения условного форматирования мы можем изменить правило, фактически мы можем также удалить условия форматирования. Так что наши данные вернутся к норме.
  • Мы можем применить более одного условия в одном макросе.

Рекомендуемые статьи

Это руководство по условному форматированию VBA. Здесь мы обсудим, как использовать функцию условного форматирования Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Функция копирования и вставки в VBA
  2. Функция подстроки Excel
  3. Индекс VBA вне диапазона
  4. Excel ISNUMBER Formula
  5. Условное форматирование для дат в Excel

Понравилась статья? Поделить с друзьями:
  • Если цвет ячейки excel то в ней
  • Если ячейка одного то сумма в excel
  • Если ячейка не равна нулю то excel
  • Если цвет в ячейки зеленый то да в excel
  • Если ячейка не пустая то сцепить excel