Как сделать ячейку активной по условию в excel?
Содержание
Добрый день, уважаемые!
Помогите составить код.
Задача такова:
На активном листе (в столбце А5:А350) необходимо выделить ячейку по условию
Sub Кнопка8_НАЙТИ()
Dim n, FF, Message, i, Obj, kk, firstAddress
kk = «Номер записи не найден!»
Message = «Введите порядковый № записи»
FF = InputBox(Message)
If FF = «» Then Exit Sub
n = Worksheets.Count
For i = 1 To n
With Worksheets(i).Cells
Set Obj = .Range(.Cells(4, 1), .Cells(350, 1)).Find(FF, LookIn:=xlValues)
If Not Obj Is Nothing Then
firstAddress = Obj.Address
Dim wsSh As Object
Sheets(i).Select
.Range(firstAddress).Select
GoTo m1
Next
FF = MsgBox(kk)
If kk = «Номер записи не найден» Then Exit Sub
m1:
On Error Resume Next
Application.Run «База.xls!Удаление»
Range(«I5»).Select
Application.Run «База.xls!ВосстановитьИнтерфейс»
Application.Run «База.xls!УбратьВсё»
End Sub
Допустим, что одним из наших заданий является ввод информации о том, делал ли заказ клиент в текущем месяце. После чего на основе полученной информации необходимо выделить цветом ячейки по условию: какой из клиентов не совершил ни одного заказа на протяжении последних 3-х месяцев. Для таких клиентов нужно будет повторно выслать предложение.
Естественно это задание для Экселя. Программа должна автоматически найти таких контрагентов и соответственно выделить их цветом. Для этих условий будем использовать условное форматирование.
Автоматическое заполнение ячеек датами
Сначала подготовим структуру для заполнения регистра. В первую очередь условно рассмотрим готовый пример автоматизированного регистра, который изображен ниже на рисунке:
Пользователю только необходимо указать если клиент совершал заказ в текущем месяце, то в соответствующую ячейку следует вводить текстовое значение «заказ». Главное условие для выделения: если на протяжении 3-х месяцев контрагент не сделал ни одного заказа, его номер автоматически выделяется красным цветом.
Представленное данное решение должно автоматизировать некоторые рабочие процессы и упростить визуальный анализ данных.
Автоматическое заполнение ячеек актуальными датами
В первую очередь для регистра с номерами клиентов создадим заголовки столбцов с зеленым цветом и актуальными месяцами, которые будут автоматически отображать периоды времени. Для этого в ячейку B1 введите следующую формулу:
Как работает формула для автоматической генерации уходящих месяцев?
На рисунке формула возвращает период уходящего времени начиная даты написания статьи: 17.09.2017. В первом аргументе в функции DATA – вложена формула, которая всегда возвращает текущий год на сегодняшнюю дату благодаря функциям: ГОД и СЕГОНЯ. Во втором аргументе указан номер месяца (-1). Отрицательное число значит, что нас интересует какой был месяц в прошлом времени. Пример условий для второго аргумента со значением:
- 1 – значит первый месяц (январь) в году указанном в первом аргументе;
- 0 – это 1 месяца назад;
- -1 – это 2 мес. назад от начала текущего года (то есть: 01.10.2016).
Последний аргумент – это номер дня месяца указано во втором аргументе. В результате функция ДАТА собирает все параметры в одно значение и формула возвращает соответственную дату.
Далее перейдите в ячейку C1 и введите следующую формулу:
Как видно теперь функция ДАТА использует значение из ячейки B1 и увеличивает номер месяца на 1 по отношению к предыдущей ячейки. В результате получаем 1 – число следующего месяца.
Теперь скопируйте эту формулу из ячейки C1 в остальные заголовки столбцов диапазона D1:L1.
Выделите диапазон ячеек B1:L1 и выберите инструмент: «ГЛАВНАЯ»-«Ячейки»-«Формат ячеек» или просто нажмите комбинацию клавиш CTRL+1. В появившемся диалоговом окне, на вкладке «Число», в разделе «Числовые форматы:» выберите опцию «(все форматы)». В поле «Тип:» введите значение: МММ.ГГ (обязательно буквы в верхнем регистре). Благодаря этому мы получим укороченное отображение значения дат в заголовках регистра, что упростит визуальный анализ и сделает его более комфортным за счет лучшей читабельности.
Обратите внимание! При наступлении января месяца (D1), формула автоматически меняет в дате год на следующий.
Как выделить столбец цветом в Excel по условию
Теперь необходимо выделить ячейки цветом, касающиеся текущего месяца. Благодаря этому мы с легкостью найдем столбец, в который нужно вводить актуальные данные в этом месяце. Для этого:
- Выделите диапазон ячеек B2:L15 и выберите инструмент: «ГЛАВНАЯ»-«Стили»-«Условное форматирование»-«Создать правило». А в появившемся окне «Создание правила форматирования» выберите опцию: «Использовать формулу для определения форматируемых ячеек»
- В поле ввода введите формулу:
- Щелкните на кнопку «Формат» и укажите на вкладке «Заливка» каким цветом будут выделены ячейки актуального месяца. Например – зеленый. После чего на всех окнах для подтверждения нажмите на кнопку «ОК».
Столбец под соответствующим заголовком регистра автоматически подсвечивается зеленым цветом соответственно с нашими условиями:
Как работает формула выделения столбца цветом по условию?
Благодаря тому, что перед созданием правила условного форматирования мы охватили всю табличную часть для введения данных регистра, форматирование будет активно для каждой ячейки в этом диапазоне B2:L15. Смешанная ссылка в формуле B$1 (абсолютный адрес только для строк, а для столбцов – относительный) обусловливает, что формула будет всегда относиться к первой строке каждого столбца.
Автоматическое выделение цветом столбца по условию текущего месяца
Главное условие для заполнения цветом ячеек: если в диапазоне B1:L1 находиться та же дата, что и первого дня текущего месяца, тут же ячейки в целом столбце изменяют свой цвет на указанный в условном форматировании.
Обратите внимание! В условиях этой формулы, для последнего аргумента функции ДАТА указано значение 1, так же, как и для формул в определении дат для заголовков столбцов регистра.
В нашем случаи — это зеленая заливка ячеек. Если мы откроем наш регистр в следующем месяце, то уже ему соответствующий столбец будет выделен зеленым цветом в независимости от текущего дня.
Табличная часть сформатирована, теперь заполним ее текстовым значением «заказ» в смешанном порядке клиентов для текущего и прошлых месяцев.
Как выделить ячейки красным цветом по условию
Теперь нам необходимо выделить красным цветом ячейки с номерами клиентов, которые на протяжении 3-х месяцев не совершили ни одного заказа. Для этого:
- Выделите диапазон ячеек A2:A15 (то есть список номеров клиентов) и выберите инструмент: «ГЛАВНАЯ»-«Стили»-«Условное форматирование»-«Создать правило». А в появившемся окне «Создание правила форматирования» выберите опцию: «Использовать формулу для определения форматируемых ячеек»
- В этот раз в поле ввода введите формулу:
- Щелкните на кнопку «Формат» и укажите красный цвет на вкладке «Заливка». После чего на всех окнах нажмите «ОК».
- Заполоните ячейки текстовым значением «заказ» как на рисунке и посмотрите на результат:
Номера клиентов подсвечиваются красным цветом, если в их строке нет значения «заказ» в последних трех ячейках к текущему месяцу (включительно).
Анализ формулы для выделения цветом ячеек по условию:
Сначала займемся средней частью нашей формулы. Функция СМЕЩ возвращает ссылку на диапазон смещенного по отношении к области базового диапазона определенной числом строк и столбцов. Возвращаемая ссылка может быть одной ячейкой или целым диапазоном ячеек. Дополнительно можно определить количество возвращаемых строк и столбцов. В нашем примере функция возвращает ссылку на диапазон ячеек для последних 3-х месяцев.
Важная часть для нашего условия выделения цветом находиться в первом аргументе функции СМЕЩ. Он определяет, с какого месяца начать смещение. В данном примере – это ячейка D2, то есть начало года – январь. Естественно для остальных ячеек в столбце номер строки для базовой ячейки будет соответствовать номеру строки в котором она находиться. Следующие 2 аргумента функции СМЕЩ определяют на сколько строк и столбцов должно быть выполнено смещение. Так как вычисления для каждого клиента будем выполнять в той же строке, значение смещения для строк указываем –¬ 0.
В тоже время для вычисления значения третьего аргумента (смещение по столбцам) используем вложенную формулу МЕСЯЦ(СЕГОДНЯ()), Которая в соответствии с условиями возвращает номер текущего месяца в текущем году. От вычисленного формулой номера месяца отнимаем число 4, то есть в случаи Ноября получаем смещение на 8 столбцов. А, например, для Июня – только на 2 столбца.
Последнее два аргумента для функции СМЕЩ определяют высоту (в количестве строк) и ширину (в количестве столбцов) возвращаемого диапазона. В нашем примере – это область ячеек с высотой на 1-ну строку и шириной на 4 столбца. Этот диапазон охватывает столбцы 3-х предыдущих месяцев и текущий.
Первая функция в формуле СЧЕТЕСЛИ проверяет условия: сколько раз в возвращаемом диапазоне с помощью функции СМЕЩ встречается текстовое значение «заказ». Если функция возвращает значение 0 – значит от клиента с таким номером на протяжении 3-х месяцев не было ни одного заказа. А в соответствии с нашими условиями, ячейка с номером данного клиента выделяется красным цветом заливки.
Если мы хотим регистрировать данные по клиентам, Excel идеально приспособлен для этой цели. С легкостью можно записывать в соответствующие категории число заказанных товаров, а также даты реализации транзакций. Проблема постепенно начинает возникать с ростом объема данных.
Скачать пример выделения цветом ячеек по условию в Excel
Если их так много, что тратим несколько минут на поиск конкретной позиции регистра и анализ введенной информации. В таком случае стоит добавить в таблицу регистра механизмы, для автоматизации некоторых рабочих процессов пользователя. Что мы и сделали.
Заказывайте сушильные шкафы в компании ULAB
В Microsoft Excel, при создании таблиц, очень удобно и наглядно помечать ячейки цветом. Но что делать, если нам понадобиться суммировать значения ячеек одного цвета? По умолчанию, данной функции в Excel до сих пор нет. Решить эту проблему можно написав макрос в Visual Basic.
Для этого в Excel версии 2007-2013 переходим на вкладку Разработчик и нажимаем Visual Basic.
Если такой вкладки нет, то включаем ее следующим образом: Файл/Параметры/Настройка ленты и ставим галочку напротив слова Разработчик.
В открывшемся окне редактора нажимаем Insert/Module и копируем туда следующий текст:
1 2 3 4 5 6 7 8 9 10 11 |
Public Function SumByColor(DataRange As Range, ColorSample As Range) As Double Dim Sum As Double Application.Volatile True For Each cell In DataRange If cell.Interior.Color = ColorSample.Interior.Color Then Sum = Sum + cell.Value End If Next cell SumByColor = Sum End Function |
Public Function SumByColor(DataRange As Range, ColorSample As Range) As Double Dim Sum As Double Application.Volatile True For Each cell In DataRange If cell.Interior.Color = ColorSample.Interior.Color Then Sum = Sum + cell.Value End If Next cell SumByColor = Sum End Function
Сохраняем изменения. Далее в Excel на вкладке Формулы выбираем пункт Вставить функцию. Необходимо выбрать категорию Определенные пользователем – тогда отобразится наша функция – SumByColor.
У этой функции 2 аргументы:
DataRange – диапазон ячеек с числами;
ColorSample – ячейка, цвет которой является образцом для суммирования.
Вот и все. Данная функция корректно работает на последних версиях Excel. Надеюсь, она пригодится Вам при составлении отчетов.
Оцените статью
(
проголосовало, средняя оценка:
из 5)
Теги: excel
Трекбэк с Вашего сайта.
Иногда вы хотите разрешить пользователям изменять ячейки, содержащие данные, не разрешая менять формулы. Можно заблокировать ячейки, содержащие формулы, не защищая целый лист или книгу.
При создании электронной таблицы большинство из нас используют определенного рода формулы, Иногда, однако, мы не хотим, чтобы другие пользователи портили, удаляли или переписывали любые формулы, присутствующие в таблице, Самый простой и распространенный способ запрещения модификации формул — защитить лист, Однако защита листа не только мешает пользователям изменять формулы, она также подразумевает, что пользователи не смогут ввести или изменить никакие данные, Обычно вы не хотите заходить так далеко, По умолчанию все ячейки на листе заблокированы; однако это не имеет никакого эффекта, пока не применяется защита листа. Далее мы расскажем об очень простом способе защиты листа, когда блокируются и защищаются только ячейки с формулами.
Выберите все ячейки на листе, нажав сочетание клавиш Ctrl/Apple+A или щелкнув кнопку выделения листа (серый квадрат в месте пересечения столбца А и строки 1). Затем выберите команду Формат → Ячейки → Защита (Format → Cells → Protection) и сбросьте флажок Защищаемая ячейка (Locked). Щелкните кнопку ОК.
Теперь выделите любую ячейку, выберите команду Правка → Перейти (Edit → Go To) (Ctrl+G или F5) и щелкните кнопку Выделить (Special). Вы увидите диалоговое окно выделения группы ячеек (рис. 1.13).
В диалоговом окне Go To Special (Выделение группы ячеек) выберите переключатель Формулы (Formulas) и, если необходимо, выберите определенные типы формул, установив соответствующие флажки. Щелкните на кнопке ОК. Будут выделены только ячейки с формулами. Выберите команду Формат → Ячейки → Защита (Format → Cells → Protection) и установите флажок Защищаемая ячейка (Locked). Щелкните на кнопке ОК. Теперь выберите команду Сервис → Защита → Защитить лист (Tools → Protection → Protect Worksheet), чтобы защитить лист и, если необходимо, назначить пароль.
Предыдущий метод определенно экономит много времени и исключает возможные ошибки при поиске формул для защиты. К сожалению, при этом пользователи не смогут воспользоваться несколькими средствами, например, сортировкой, форматированием, выравниванием текста и многими другими, о которых вы можете и не знать, даже в незаблокированной ячейке. Эту проблему можно решить двумя способами.
Первый подход совершенно не использует защиту листа, зато применяет проверку правильности данных.
Проверка правильности данных далека от идеала, когда дело доходит до предотвращения помещения в ячейки непроверенных данных. Пользователи легко могут вставлять любые скопированные данные в проверенную ячейку и, делая это, удалять пометку о проверке из этой ячейки. Если копируемая ячейка содержит пометку о проверке, то в этом случае новая пометка перекроет исходную.
Чтобы увидеть, о чем мы говорим, выделите любую ячейку, выберите команду Правка → Перейти (Edit → Go To) (Ctrl+G или F5) и щелкните кнопку Выделить (Special). В диалоговом окне Выделение группы ячеек (Go To Special) установите переключатель Формулы (Formulas) и, если необходимо, укажите только отдельные типы формул. Щелкните на кнопке ОК.
Теперь, когда выбраны только ячейки с формулами, перейдите на вкладку Данные → Проверка → Параметры (Data → Validation → Settings), в поле Тип данных (Allow) выберите Другой (Custom), а в поле Формула (Formula) введите =»» (рис. 1.14). Щелкните на кнопке ОК.
Этот метод позволяет предотвратить случайную запись данных в любые ячейки формул, хотя, как подчеркивалось в предыдущем предупреждении, это не абсолютно безопасный способ, и его можно использовать только против случайного ввода данных и т. д. Однако большое преимущество этого метода заключается в том, что на листе можно применять все возможности Excel.
Последний метод позволит использовать все возможности Excel, но только когда вы находитесь в незаблокированной ячейке. Для начала удостоверьтесь, что заблокированы только те ячейки, которые вы хотите защитить, а все остальные не заблокированы. Правой кнопкой мыши щелкните ярлычок листа, в контекстном меню выберите пункт Исходный текст (View Code) и введите код из листинга 1.17.
1 2 3 4 5 6 7 8 |
// Листинг 1.17 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Locked = True Then Me.Protect Password:="Secret" Else Me.Unprotect Password:="Secret" End If End Sub |
// Листинг 1.17 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Locked = True Then Me.Protect Password:=»Secret» Else Me.Unprotect Password:=»Secret» End If End Sub
Если вы не хотите использовать пароль, уберите строку Password:=«Secret». Если вы указали пароль, измените слово Secret на ваш пароль. Нажмите сочетание клавиш Alt/Apple+Q или щелкните крестик в правом верхнем углу окна, чтобы вернуться в Excel и сохранить книгу. Теперь каждый раз, когда вы будете выбирать заблокированную ячейку, ваш лист будет автоматически защищать себя. Как только вы выберете незаблокированную ячейку, лист автоматически снимет с себя защиту.
Этот трюк работает не идеально, хотя обычно вполне сносно. Ключевое слово, используемое в коде, Target, относится только к ячейке, активной на время выбора. Поэтому важно помнить, что, если пользователь выберет диапазон ячеек (где активные ячейки будут не заблокированы), он сможет удалить весь выделенный диапазон, так как целевая ячейка не заблокирована и, следовательно, лист снимает с себя защиту.