Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
 Аватар для OLEGOFF
1082 / 523 / 141
Регистрация: 27.02.2013
Сообщений: 1,508

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

20.03.2018, 17:47. Показов 5052. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сочинил нехитрый код,который позволяет перенести цвет ячейки в условное форматирование этой же ячейки.
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub UF()
 
Set aRange = Application.InputBox(prompt:="Выберите диапазон", Type:=8)
If aRange Is Nothing Then Exit Sub
  'Application.ScreenUpdating = False
For Each c In aRange
    c.FormatConditions.Add(xlCellValue, xlEqual, "=$A$1=1").Interior.Color = c.Interior.Color
Next c
  'Application.ScreenUpdating = True
End Sub
Формула в УФ записывается правильно
Code
1
=$A$1=1
,а действует с точностью до наоборот.
Если А1=1 ячейки пустые,а если не равно,то УФ срабатывает.

Помогите разобраться,в чем дело?

И второй вопрос.Что бы записать два и более условий в одну ячейку необходимо выбрать разные диапазоны.
Конечная цель:чтобы меняя значение ячейки А1 в матрице А10:Е16 получить соответствующее изображение.
Не могу сообразить как выполнить нужное смещение для копирования.
Вложения
Тип файла: zip UF.zip (13.6 Кб, 14 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2018, 17:47
Ответы с готовыми решениями:

Условное форматирование в VBA - ошибка 1004
как избавиться от ошибки Error 1004 (Application-defined or object-defined error) в 200 и 300 строках? Sub format() 10 ...

Условное форматирование
Ребят, такой вопрос: есть ячейка, в которой есть условное форматирование на ввод чисел от 1 до 10. Если пользователь вводит число от...

Условное форматирование
Здравствуйте! Помогите написать правильно формулы для УФ. В ячейке А1 стоит дата мне нужно чтобы эта дата закрашивалась зеленым цветов за...

14
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
20.03.2018, 20:50
OLEGOFF, доброго времени суток!

Правая часть выражения ниже говорит о том, что при выполнении условия ты делаешь ту же заливку, что и без условного форматирования ячейка имеет и так. Для задания цвета заливки нужно в правой части выражения прописать нужный тебе цвет (что делается несколькими способами: через код цвета, через индекс цвета в палитре и т.п.)
Visual Basic
1
c.FormatConditions.Add(xlCellValue, xlEqual, "=$A$1=1").Interior.Color = c.Interior.Color
Второй момент, что я вижу, это цикл, который по-моему вовсе не нужен. Достаточно всему диапазону применить свойство FormatConditions.

И то, что я очень часто пишу - объявляй переменные и требуй этого от себя директивой Option Explicit, только если твой ник не Catstail. Особенно, когда у тебя лезут непонятные ошибки. Ну и вводить адрес диапазона в InputBox, по-моему жутко неудобно. Лучше выполнить макрос над объектом Selection, проверив что выбран объект из типа Range.
1
 Аватар для OLEGOFF
1082 / 523 / 141
Регистрация: 27.02.2013
Сообщений: 1,508
20.03.2018, 20:59  [ТС]
Цитата Сообщение от mc-black Посмотреть сообщение
при выполнении условия ты делаешь ту же заливку, что и без условного форматирования ячейка имеет и так
Именно это мне и надо.Посмотрите пожалуйста пример,там станет понятней.
В ячейку А1 введите 1,2 или3.

Добавлено через 5 минут
Цитата Сообщение от mc-black Посмотреть сообщение
объявляй переменные и требуй этого от себя директивой Option Explicit
Знаю,но постоянно забываю.Спасибо за напоминание.
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
20.03.2018, 21:12
OLEGOFF, правильно понимаю, что тебе нужны "матричные индикаторы" в разных местах, привязанные к значению в одной ячейке каждый? Чтобы работала эта индикация только на условном форматировании? Интересная идея, надо подумать.
0
 Аватар для OLEGOFF
1082 / 523 / 141
Регистрация: 27.02.2013
Сообщений: 1,508
20.03.2018, 21:14  [ТС]
Цитата Сообщение от mc-black Посмотреть сообщение
тебе нужны "матричные индикаторы" в разных местах, привязанные к значению в одной ячейке каждый?
Пока да.Это я для примера придумал,что бы принцип отработать,а основная задумка чуть глобальней.
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
20.03.2018, 21:46
OLEGOFF, попробуй в цикл добавить формат тех образцов, что приведены вверху, указав адресацию ячеек-образцов. С числами даже проще - будет смещение с масштабированием. Есть же возможность указать много условий на 1 ячейку? Для примера:
Visual Basic
1
c.FormatConditions.Add(xlCellValue, xlEqual, "=$A$1=1").Interior.Color = Cells(i,j).Interior.Color
Если делать это в двух вложенных циклах по столбцам и строкам, то вполне себе возможно вычислить координаты образца для формата.
1
21.03.2018, 07:41

Не по теме:

mc-black, я тронут! :senor:

0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.03.2018, 13:28
OLEGOFF, интересно, но так получается очень много правил УФ. Если расположить паттерны на отдельном (скрытом) листе, то можно обойтись одним правилом УФ для "знакоместа", и без VBA.
Code
1
=ИНДЕКС(шрифт!$1:$7;СТРОКА(A1);$A$1*6+СТОЛБЕЦ(A1))
Вложения
Тип файла: xlsx UF.xlsx (10.5 Кб, 23 просмотров)
1
 Аватар для OLEGOFF
1082 / 523 / 141
Регистрация: 27.02.2013
Сообщений: 1,508
21.03.2018, 17:07  [ТС]
Казанский, большое спасибо за пример.Интересное решение,уже даже придумал где применить.Но это потом.
Пример с матрицами придумал для наглядности.На самом деле дела обстоят "хуже".
Имеется две произвольные области(в пределах разумного,например 150х100 ячеек).
Располагаются на разных листах(но можно свести и на один лист).
Какой-либо системы раскраски или закономерности нет.Количество цветов может быть от 3-4 до 15-20.
Необходимо свести эти две области в одну.
Если обработать моим макросом каждую область отдельно,то все работает нормально.Т.е. каждая область реагирует на свою цифру в ячейке А1.
Стоит задача свести формулы УФ из двух областей в одну.
Пробовал поступить следующим образом.
1.Записать уф одной области.
2.В эти же ячейки скопировать вторую область и опять скопировать в УФ.
При таком способе должны были добавиться правила УФ2 к УФ1.
Но тут столкнулся с тем,что не существует способа копирования цвета ячеек не затрагивая уже записанные правила
УФ.
На данном этапе думаю при помощи макроса перенести цвета ячеек из второй области в первую и повторно запустить свой макрос....?
Не профи,не знаю что получится.Но вроде должно получиться.
А по первому вопросу
Цитата Сообщение от OLEGOFF Посмотреть сообщение
Формула в УФ записывается правильно
Код
=$A$1=1
,а действует с точностью до наоборот.
так и не разобрался ПОЧЕМУ?
0
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
22.03.2018, 08:55
Цитата Сообщение от OLEGOFF Посмотреть сообщение
Формула в УФ записывается правильно
записывается вообще-то Правило "Значение ячейки" а не "Формула"
0
 Аватар для OLEGOFF
1082 / 523 / 141
Регистрация: 27.02.2013
Сообщений: 1,508
22.03.2018, 09:16  [ТС]
Цитата Сообщение от Vlad999 Посмотреть сообщение
записывается вообще-то Правило "Значение ячейки"
Вместо формулы записал правило !!!Всё равно работает наоборот.
0
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
22.03.2018, 09:38
Цитата Сообщение от OLEGOFF Посмотреть сообщение
Всё равно работает наоборот.
покажите.
П.С. В суть общей задачи не вникал.
как по мне одно условие наложить на второе просто так не получится.
0
 Аватар для OLEGOFF
1082 / 523 / 141
Регистрация: 27.02.2013
Сообщений: 1,508
22.03.2018, 09:43  [ТС]
Цитата Сообщение от Vlad999 Посмотреть сообщение
покажите.
В посте №1 файл.Там написано условие,что закрашиваться должны ячейки при $А$1=1.
А они закрашиваются при $А$1<>1.
0
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
22.03.2018, 09:57
первый я видел, про него написал. а вот ваш поправленные нет.
в первом файле получалось следующее вы сравнивали значение ячейки с =$A$1=1, если в А1 один то вы сравнивали значение ячейки с ИСТИНА. но т.к. у вас все ячейки пустые то соответственно 0=ИСТИНА получали ЛОЖЬ.
1
 Аватар для OLEGOFF
1082 / 523 / 141
Регистрация: 27.02.2013
Сообщений: 1,508
22.03.2018, 10:53  [ТС]
Цитата Сообщение от OLEGOFF Посмотреть сообщение
c.FormatConditions.Add(xlCellValue, xlEqual, "=$A$1=1").Interior.Color = c.Interior.Color
Vlad999, ,большое спасибо за наставление на путь истинный.Ошибка оказалась в типе правила.
У меня получилось записано "Форматировать только ячейки которые содержат"
А для правильной работы моей логики необходимо записать "Использовать формулу для определения форматируемых ячеек"
Visual Basic
1
c.FormatConditions.Add(xlExpression, xlNotEqual, "=$A$1=1").Interior.Color = c.Interior.Color
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2018, 10:53
Помогаю со студенческими работами здесь

Условное форматирование
Ребятки, помогите, пож, переделать макрос на условное форматирование Sub Column_G_Fill_if() Set Rng =...

Условное форматирование
Помогите решить задачку.... при условном форматировании необходимо, чтобы активная ячейка находилась вверху колонки, то есть А1 или В1 или...

Условное форматирование
Добрый день господа! Прошу Вас оказать помощь. Как при помощи условного форматирования (при вводе данных), необходимо что бы...

Условное форматирование.
Ребята, подскажите. Есть в Excel такая возможность - применить к определённому диапазону условное форматирование. Т. е., например, если в...

Условное форматирование ячеек
Ребята, подскажите. Есть в Excel такая возможность - применить к определённому диапазону условное форматирование. Т. е., например, если в...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru