Алексей Алексеевич Громаковский - Excel. Трюки и эффекты стр 22.

Шрифт
Фон

Поиск данных в диапазоне

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

Поиск в диапазоне значения по шаблону

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

Листинг 2.28. Поиск и замена по шаблону

Sub ReplaceCellsData()

Dim cell As Range

' Просмотр всех ячеек диапазона G1:K20 и замена искомого

текста

For Each cell In [G1:K20]

If cell.Value Like "*Доход*" Then

cell.Value = "Выручка"

cell.Interior.Color = RGB(255, 255, 0)

Else

cell.Interior.Color = RGB(255, 255, 255)

End If

Next

End Sub

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

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

Можно настроить параметры поиска требуемого значения таким образом, что его результат будет выведен в отдельном информационном окне. Вот пример макроса (листинг 2.29), который позволяет решить эту задачу.

Листинг 2.29. Поиск значения с отображением результата в отдельном окне

Sub Search()

Dim rgResult As Range

' Поиск заданного значения в диапазоне B1:B20 и вывод результата

Set rgResult = Range("B1:B20").Find(9999, , xlValues)

If rgResult Is Nothing Then

MsgBox "Поиск не дал результатов"

Else

MsgBox rgResult.Address

End If

End Sub

С помощью данного макроса обрабатывается диапазон В1:В20, в котором ведется поиск значения 9 99 9. При обнаружении данного значения появляется окно с указанием адреса соответствующей ячейки. Если же указанное значение не обнаружено, то в данном окне отображается сообщение Поиск не дал результатов.

Поиск с выделением найденных данных

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

Листинг 2.30. Выделение найденных данных

Sub FindAndSelect()

Dim strStartAddr As String ' Хранит координаты первого найденного _ значения

Dim rgResult As Range

' Поиск первого входжения искомого слова

Set rgResult = Range("B1:B10").Find("Прибыль", , xlValues)

If Not rgResult Is Nothing Then

' Сохраним адрес найденной ячейки (чтобы контролировать _

зацикливание поиска)

strStartAddr = rgResult.Address

End If

Do While Not rgResult Is Nothing

' Обработка результата поиска

rgResult.Interior.Color = RGB(255, 255, 0)

' Новый поиск

Set rgResult = Range("B1:B10").FindNext(rgResult)

If rgResult.Address = strStartAddr Then

' Поиск завершен

Exit Do

End If

Loop

End Sub

Этот макрос обрабатывает диапазон В1:В10 и ищет в нем значение Прибыль. Все ячейки, в которых обнаружено данное значение, будут выделены желтым цветом (строка rgResult. Interior. Color = RGB (255, 255, 0)). С помощью подобных макросов можно обрабатывать любые диапазоны и находить в них любые значения.

Создание цветной границы диапазона

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

Листинг 2.31. Оформление верхней и нижней границ диапазона

Sub RangeBorder()

Dim rgRange As Range

Set rgRange = Range("B2:D5")

' Оформление верхней границы диапазона

With rgRange.Borders(xlEdgeTop)

.Weight = xlThick

.LineStyle = xlContinuous

.Color = RGB(0, 0, 255)

End With

' Оформление нижней границы диапазона

With rgRange.Borders(xlEdgeBottom)

.Weight = xlMedium

.LineStyle = xlDash

.Color = RGB(255, 0, 255)

End With

End Sub

Очевидно, что цвета и толщину линии можно изменять по своему усмотрению.

Автоматическое определение адреса ячейки

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

Листинг 2.32. Информация об адресе активной ячейки

Sub Worksheet_SelectionChange(ByVal Target As Range)

' Вывод адреса ячейки в различных форматах

MsgBox Target.Address() & vbCr & _

Target.Address(RowAbsolute:=False) & vbCr & _

Target.Address(ReferenceStyle:=xlR1C1) & vbCr & _

Target.Address(ReferenceStyle:=xlR1C1, _

RowAbsolute:=False, ColumnAbsolute:=False, _

RelativeTo:=Worksheets(1).Cells(2, 2))

End Sub

Теперь при щелчке кнопкой мыши на ячейке, например, Е9 на экране отобразится окно со следующим сообщением:

$E$9

$E9

R9C5

R[7]C[3]

Адрес ячейки представлен в нескольких форматах, в том числе и относительно другой ячейки. В качестве ячейки, относительно которой определяется адресация, в данном случае используется ячейка В2 (см. в коде значение параметра RelativeTo).

Автоматизация добавления примечаний в указанном диапазоне

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

Для достижения такого эффекта можно воспользоваться макросом, код которого приведен в листинге 2.33.

Листинг 2.33. Добавление примечаний в диапазон

Sub CreateComments()

Dim cell As Range

' Производим поиск по всем ячейкам диапазона и добавляем

примечания _

ко всем ячейкам, содержащим слово "Выручка"

For Each cell In Range("B1:B100")

If cell.Value Like "*Выручка*" Then

cell.ClearComments

cell.AddComment "Неучтенная наличка"

End If

Next

End Sub

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

Заливка диапазона

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

Листинг 2.34. Создание заливки диапазона

Sub FillRange()

' Заливка диапазона

With Range("B1:E10")

' Задаем узор – сетчатый

.Interior.Pattern = xlPatternChecker

' Цвет узора – синий

.Interior.PatternColor = RGB(0, 0, 255)

' Цвет ячейки – красный

.Interior.Color = RGB(255, 0, 0)

End With

End Sub

В результате применения данного макроса диапазон В1:Е10 будет залит красным цветом с синим сетчатым узором.

Ввод строго ограниченных значений в указанный диапазон

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

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке