Макрос выделения ячейки по условию excel

Обновлено: 04.07.2024

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

А если при движении активной ячейки по листу будет подсвечиваться текущая строка и столбец? Своего рода координатное выделение примерно такого вида:

Поудобнее, чем линейка, правда?

Есть несколько способов разной сложности, чтобы реализовать такое. Каждый способ - со своими плюсами и минусами. Давайте разберем их детально.

Способ 1. Очевидный. Макрос, выделяющий текущую строку и столбец

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

Откройте лист со таблицей, в которой хотите получить такое координатное выделение. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этих трех макросов:

Измените адрес рабочего диапазона на свой - именно в пределах этого диапазона и будет работать наше выделение. Затем закройте редактор Visual Basic и вернитесь в Excel.

Нажмите сочетание клавиш ALT+F8, чтобы открыть окно со списком доступных макросов. Макрос Selection_On, как нетрудно догадаться, включает координатное выделение на текущем листе, а макрос Selection_Off - выключает его. В этом же окне, нажав кнопку Параметры (Options) можно назначить этим макросам сочетания клавиш для удобного запуска.

Плюсы этого способа:

  • относительная простота реализации
  • выделение - операция безобидная и никак не изменяет содержимое или форматирование ячеек листа, все остается как есть

Минусы этого способа:

  • такое выделение некорректно работает в том случае, если на листе есть объединенные ячейки - выделяются сразу все строки и столбцы, входящие в объединение
  • если случайно нажать клавишу Delete, то очистится не только активная ячейка, а вся выделенная область, т.е. удалятся данные из всей строки и столбца

Способ 2. Оригинальный. Функция ЯЧЕЙКА + Условное форматирование

Этот способ хотя и имеет пару недостатков, мне представляется весьма изящным. Реализовать что-либо, используя только встроенные средства Excel, минимально влезая в программирование на VBA - высший пилотаж ;)

Способ основан на использовании функции ЯЧЕЙКА (CELL), которая может выдавать массу различной информации по заданной ячейке - высоту, ширину, номер строки-столбца, числовой формат и т.д.. Эта функция имеет два аргумента:

  • кодовое слово для параметра, например "столбец" или "строка"
  • адрес ячейки, для которой мы хотим определить значение этого параметра

Хитрость в том, что второй аргумент не является обязательным. Если он не указан, то берется текущая активная ячейка.

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

  1. Выделяем нашу таблицу, т.е. те ячейки, в которых в будущем должно отображаться координатное выделение.
  2. В Excel 2003 и более старших версиях открываем меню Формат - Условное форматирование - Формула (Format - Conditional Formatting - Formula) . В Excel 2007 и новее - жмем на вкладке Главная (Home) кнопку Условное форматирование - Создать правило (Conditional Formatting - Create Rule) и выбираем тип правила Использовать формулу для определения форматируемых ячеек (Use formula)
  3. Вводим формулу для нашего координатного выделения:

Все почти готово, но остался один нюанс. Дело в том, что Excel не считает изменение выделения изменением данных на листе. И, как следствие, не запускает пересчет формул и перекраску условного форматирования только при изменении положения активной ячейки. Поэтому добавим в модуль листа простой макрос, который будет это делать. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этого простого макроса:

Теперь при изменении выделения будет запускаться процесс пересчета формулы с функцией ЯЧЕЙКА в условном форматировании и заливаться текущая строка и столбец.

Плюсы этого способа:

  • Условное форматирование не нарушает пользовательское форматирование таблицы
  • Этот вариант выделения корректно работает с объединенными ячейками.
  • Нет риска удалить целую строку и столбец с данными при случайном нажатии Delete.
  • Макросы используются минимально

Минусы этого способа:

  • Формулу для условного форматирования надо вводить вручную.
  • Нет быстрого способа включить-выключить такое форматирование - оно включено всегда, пока не будет удалено правило.

Способ 3. Оптимальный. Условное форматирование + макросы

Золотая середина. Используем механизм отслеживания выделения на листе при помощи макросов из способа-1 и добавим к нему безопасное выделение цветом с помощью условного форматирования из способа-2.

Откройте лист со таблицей, в которой хотите получить такое координатное выделение. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этих трех макросов:

Не забудьте изменить адрес рабочего диапазона на адрес своей таблицы. Закройте редактор Visual Basic и вернитесь в Excel. Чтобы использовать добавленные макросы, нажмите сочетание клавиш ALT+F8 и действуйте аналогично способу 1.

Способ 4. Красивый. Надстройка FollowCellPointer

Excel MVP Jan Karel Pieterse родом из Нидерландов раздает у себя на сайте бесплатную надстройку FollowCellPointer(36Кб), которая решает ту же задачу, отрисовывая с помощью макросов графические линии-стрелки для подсветки текущей строки и столбца:

Красивое решение. Не без глюков местами, но попробовать точно стоит. Качаем архив, распаковываем на диск и устанавливаем надстройку:

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

Выделение несмежных диапазонов с помощью макроса

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

таблица расходов.

Нам необходимо экспонировать ячейки, которые содержат значение «нд» выделив их серым цветом заливки фона. В таблице на десятки тысяч строк сложно искать все эти ячейки. А если редактировать каждую ячейку вручную, тогда потребуется много сил и времени. Без условно можно воспользоваться инструментом «Условное форматирование». Но иногда для автоматизированного решения данной задачи лучше написать свой собственный макрос. Дело в том, что несмотря на широкие возможности условного форматирования – макрос является более гибким инструментом. Его потом можно применять разным способом. Ведь в основе его принципа действия лежит выделение ячеек с определенным значением. После того как ознакомившись с нашей версией макроса вы сможете его легко изменять, придавая ему все новые функциональные возможности. В результате чего вас будет ограничивать только высота полета вашей фантазии.

Откройте редактор: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» (ALT+F11):

ALT+F11.

В редакторе создайте новый модуль выбрав инструмент: «Insert»-«Module» и введите в него следующий VBA-код макроса:

Sub PoiskZnach()
Dim i As Long
Dim znach As Variant
Dim diapaz1 As Range
Dim diapaz2 As Range
znach = InputBox( "Введите исходное значение" )
If znach = "" Then Exit Sub
If IsNumeric(znach) Then znach = znach * 1
Set diapaz1 = Application.Intersect(Selection, ActiveSheet.UsedRange)
If diapaz1 Is Nothing Then
MsgBox "Сначала выделите диапазон!"
Exit Sub
Else
For i = 1 To diapaz1.Count
If diapaz1(i) = znach Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1(i)
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1(i))
End If
End If
Next
End If
If diapaz2 Is Nothing Then
Else
diapaz2. Select
End If
End Sub

Макро-Код.

Теперь если мы хотим выделить все ячейки которые содержать значение «нд» в таблице отчета уровня расходов по отделам и присвоить им серый фон, тогда выделите диапазон B2:F12 выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«PoiskZnach»-«Выполнить».

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

PoiskZnach.

После чего макрос выполнит все инструкции, описанные в его коде на языке программирования VBA. Он автоматически и самостоятельно выделит все ячейки в выделенном диапазоне, которые содержат значение «нд»:

автоматически выделит все ячейки.

Результат автоматического выделения макросом группы ячеек соответствующие критерию поиска.

В начале кода объявлены 4 переменные:

  1. i – счетчик цикла.
  2. znach – значение которое должна содержать ячейка.
  3. diapaz1 – адрес проверяемого диапазона.
  4. diapaz2 – адрес для несмежного диапазона, соответствующий критериям пользователя.

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

После декларации переменных вызываем окно для ввода критериев поиска необходимого значения и передаем эти же критерии в переменную znach. Сразу в коде описываем инструкцию для проверки на пустые критерии. Если пользователь оставил поле ввода пустым или нажал на кнопку «Отмена», тогда работа макроса будет прервана остановкой с помощью вызова соответствующей инструкции:

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

На следующей строке кода оператором Set создаем ссылку и в переменную diapaz1 присваиваем диапазон ячеек, который состоит из двух частей:

  1. адрес выделенного диапазона ячеек.
  2. адрес используемого диапазона рабочего листа Excel.

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

Поэтому если предварительно не был выделен диапазон ячеек в области используемого диапазона рабочего листа Excel, тогда объект для переменной diapaz1 будет пустым (без ссылки). И дальнейшая работа макроса – не возможна. Поэтому следует проверить не является ли пустым объект в переменной diapaz1:

If diapaz1 Is Nothing Then ‘проверяем пустой ли объект Range в переменной diapaz1

MsgBox "Сначала выделите диапазон!"

И выполнение кода снова прерывается функцией Exit Sub. Если же пользователь сделал все верно, тогда дальше беспрепятственно выполняется следующая строка в коде макроса.

В следующей части VBA-макроса создан цикл, внутри которого по очереди все ячейки в диапазоне определенным переменной diapaz1 проверяются на наличие искомого значения:

For i = 1 To diapaz1.Count
If diapaz1(i) = znach Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1(i)
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1(i))
End If
End If
Next

Если диапазон переменной diapaz1 содержит ячейку с таким же значением, как и в переменной znach, тогда несмежный диапазон ячеек в переменной diapaz2 увеличивается на один адрес для включения этой ячейки. Таким образом несмежный диапазон в переменной diapaz2 включая в себя все адреса найденных ячеек. Реализовывается увеличение несмежного диапазона в переменной diapaz2 с помощью свойства Union, оно позволяет создавать несмежные диапазоны.

MsgBox «Не найдено исходное значение»

Макрос для пересчета выделенной области

Теперь вы самостоятельно можете модифицировать макрос. гибко настраивая его под самые привередливые потребности. Например, добавим новую возможность. Макрос будет сообщать нам о количестве найденных ячеек, соответствующих критерию поиска. Для этого в конце макроса после строки diapaz2.Select следует добавить новую строчку кода:

MsgBox "Найдено: " & diapaz2.Count & " ячеек!"

MsgBox.

Чтобы макрос умел работать с ключами поиска для многозначных значений (например, звездочка «*» – для всех символов), тогда следует изменить соответствующий оператор в коде. Перейдите на строку макроса №15 где указана инструкция для проверки соответствия значений просматриваемых ячеек в диапазоне со значением переменной znach. Затем измените оператор сравнение на оператор Like:

If diapaz1(i) Like znach Then

Теперь после такой модификации кода макроса в критерии поиска можно использовать ключ звездочку «*» (для всех символов). Например, если мы в поле ввода введем значение «н*» макрос будет учитывать все ячейки, значение которых начинается с символа буквы «н».

ключ символ звездочки.

В Excel можно использовать только 2 ключа многозначного значения запроса в поиске:

  1. «*» – символ звездочки (любые другие символы).
  2. «?» – вопросительный знак (отдельный символ) например, так:

Если нужно сделать так, чтобы макрос не был чувствителен к регистру вводимых текстовых символов? Если макрос должен одинаково находит значения не зависимо большая или маленькая буква в критерии поиска и выдавать один и тот же результат? Тогда в строке №15 , где проверяется значение ячейки используйте функцию LCase следующим образом:

If LCase(diapaz1(i)) Like LCase(znach) Then

Задача функции LCase замена всех символов в тексте на нижний регистр (маленькие буквы):

LCase.

Полная новая версия кода модифицированного макроса для выделения ячеек выглядит так:

Sub PoiskZnach()
Dim i As Long
Dim znach As Variant
Dim diapaz1 As Range
Dim diapaz2 As Range
znach = InputBox( "Введите исходное значение" )
If znach = "" Then Exit Sub
If IsNumeric(znach) Then znach = znach * 1
Set diapaz1 = Application.Intersect(Selection, ActiveSheet.UsedRange)
If diapaz1 Is Nothing Then
MsgBox "Сначала выделите диапазон!"
Exit Sub
Else
For i = 1 To diapaz1.Count
If LCase(diapaz1(i)) Like LCase(znach) Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1(i)
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1(i))
End If
End If
Next
End If
If diapaz2 Is Nothing Then
MsgBox "Не найдено исходное значение"
Else
diapaz2. Select
MsgBox "Найдено: " & diapaz2.Count & " ячеек!"
End If
End Sub

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

Ячейка в Excel – это основной элемент электронной таблицы, образованный пересечением столбца и строки. Имя столбца и номер строки, на пересечении которых находится ячейка, задают адрес ячейки и представляют собой координаты, определяющие расположение этой ячейки на листе.

В ячейках таблиц могут содержаться числа, даты и текст. Числа и даты в ячейках автоматически выравниваются по правому краю, текст выравнивается по левому краю. В качестве разделителя в числах используется запятая, в качестве разделителя в датах – точка. В конце даты точка не ставится. При нарушении этих правил, неправильные числа и даты воспринимаются приложением как текст. В одну ячейку можно внести 32 767 знаков. Информацию, содержащуюся в ячейках можно отобразить числовым, текстовым и другими форматами. Действия, которые производятся с ячейками чаще всего - это форматирование (изменение формата), перемещение (изменение координат) и удаление (со сдвигом влево или со сдвигом вверх). О том как это делается и о том как это делается быстро и в автоматическом режиме я бы и хотел поговорить.

Выделение ячеек. Что значит выделить ячейку? Как выделять ячейки?

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

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

что такое строка формул в Excel

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

Для того, чтобы выделить первую или последнюю ячейку в столбце или строке, можно использовать сочетания клавиш Ctrl+(стрелка) на клавиатуре. При этом сочетания клавиши Ctrl со стрелками вверх и вниз будут выделять первую либо последнюю ячейку столбца, а сочетания Ctrl со стрелками влево и вправо – первую и последнюю ячейку строки.

Для того, чтобы выделить первую или последнюю ячейку листа, используются сочетания клавиш Ctrl+Home и Ctrl+End, при этом последней ячейкой листа считается самая нижняя, самая правая ячейка, заполненная информацией.

Как выделить диапазон ячеек? Как выделить все ячейки листа?

Диапазон – это группа ячеек, находящихся рядом друг с другом. Для выделения небольшого диапазона ячеек достаточно провести по нему курсором в виде белого широкого креста при нажатой левой кнопке мыши. Первая ячейка диапазона при этом остается незатемненной и готовой к вводу информации. Для выделения большого диапазона, можно выделить первую ячейку диапазона, после этого нажать клавишу Shift и выделить последнюю ячейку диапазона, при этом выделится весь диапазон, находящийся между этими ячейками. Для выделения диапазона ячеек можно набрать английскими буквами и цифрами адрес нужного диапазона в адресном окне строки формул, используя в качестве разделителя символ двоеточия, например A1:A10. После ввода адреса диапазона необходимо нажать клавишу Enter. Для выделения всех ячеек строки или всех ячеек столбца достаточно щелкнуть левой кнопкой мыши на названии столбца либо номере строки. Для того чтобы выделить все ячейки листа можно кликнуть по нулевой ячейке (пересечение области имен столбцов и номеров строк) либо использовать сочетание клавиш Ctrl+A (сокращение от англ. All – все). При этом активная на момент выделения ячейка остается незатемненной и готовой к вводу информации. Для выделения группы ячеек, расположенных не рядом, используется их поочередное выделение при нажатой клавише Ctrl.

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

Часто при работе с таблицами Excel возникает необходимость выделить все ячейки, удовлетворяющие определенным условиям либо содержащие только определенные значения. Например, возникает необходимость сделать защищаемыми все ячейки, содержащие формулы. Для того, чтобы выделить группу ячеек, удовлетворяющих определенным условиям, необходимо зайти на вкладку «Главная», в группе «Редактирование» раскрыть меню кнопки «Найти и выделить», после чего выбрать пункт «Выделение группы ячеек…».

выделение группы ячеек

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

выделение группы ячеек по параметрам

Выделение ячеек по условию с помощью макроса

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

1. Выделять пустые ячейки в заданном диапазоне;

2. выделять ячейки с заданным числом или числами (возможен ввод нескольких чисел через знак-разделитель точка с запятой ;);

3. выделять ячейки с заданным текстом, возможен ввод нескольких текстовых значений одновременно, через точку с запятой (;) без пробелов;

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

выделение ячеек с заданным значением

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

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

Версия от 21.10.2021

Операционная система: Windows

Microsoft Excel 2007/2010/2013/2016/2019/365

Надстройка для Excel позволяет выборочно выделять строки, отвечающие заданным условиям пользователя, например, строки, содержащие заданный текст. Пользователь в диалоговом окне надстройки задает искомое значение (либо несколько значений через знак ";" без пробелов), выбирает условие и диапазон ячеек. Программа производит выделение строк, подходящих под условия пользователя.

Для работы с надстройкой необходимо:

3. Нажать кнопку вызова диалогового окна на панели инструментов или на вкладке "Надстройки" (в зависимости от версии Excel);

Надстройка для выделения строк по условию

4. В диалоговом окне надстройки задать искомые значения, выбрать условие, диапазон для поиска, ширину выделения для строк (по всей ширине, по ширине используемого диапазона, по ширине выделенного диапазона), при необходимости указать ограничения диапазона и запустить программу.

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

Надстройка позволяет:

1. Одним кликом мыши вызывать диалоговое окно макроса прямо из панели инструментов Excel;

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

возможен ввод сразу нескольких текстовых значений разделенных знаком ";" (точка с запятой);

3. Выбирать одно из восьми условий для строк с искомым значением:

- совпадает с искомым значением;

- не совпадает с искомым значением;

- содержит искомое значение;

- не содержит искомое значение;

- начинается с искомого значения;

- не начинается с искомого значения;

- заканчивается искомым значением;

- не заканчивается искомым значением.

4. При поиске текста учитывать либо не учитывать регистр (различать заглавные и строчные буквы);

5. При нахождении строки предусмотрена возможность выделять:

а) всю строку по ширине листа;

б) часть строки, ограниченную используемым диапазоном (от первой заполненной до последней заполненной ячейки);

в) часть строки, ограниченную выделенным (выбранным) диапазоном поиска.

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

*В случае, если в надстройку будут внесены какие-либо изменения или дополнения, то обновленную версию надстройки Вы получите бесплатно.

Читайте также: