Excel. Трюки и эффекты | страница 70



Напишем в стандартном модуле редактора VBA код, который выглядит следующим образом (листинг 2.38).

Листинг 2.38. Выделение отрицательных значений

Sub NegSelect()

Dim cell As Range

' Просмотр всех ячеек выделенного диапазона и пометка тех, _

которые содержат отрицательные значения

For Each cell In Selection

If cell.Value < 0 Then

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

Else

cell.Interior.ColorIndex = xlNone

End If

Next cell

End Sub

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

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

Получение информации о выделенном диапазоне

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

Листинг 2.39. Получение информации о выделенном диапазоне

Altribute VB_Name = «module 1»

Sub TypeOfSelection()

Dim rgSelUnion As Range ' Объединение выделенных областей

Dim strTitle As String ' Заголовок сообщения

Dim strMessage As String ' Текст сообщения

Dim strSelType As String ' Тип выделения (простой или _ множественный)

Dim lngBlockCount As Long ' Количество блоков в выделении

Dim lngCellCount As Variant ' Общее количество выделенных ячеек

Dim lngColCount As Long ' Количество выделенных столбцов

Dim lngRowCount As Long ' Количество выделенных строк

Dim lngAreasCount As Long ' Количество выделенных областей

Dim strCurSelType As String

Dim rgArea As Range

' Подсчет количества выделенных областей и определение типа

выделения: _

простое (одна область) или сложное(несколько областей)

intAreasCount = Selection.Areas.Count

If intAreasCount = 1 Then

strTitle = «Простое выделение»

Else

strTitle = «Множественное выделение»

End If

' Определение типа выделения первой области

strSelType = dhGetAreaType(Selection.Areas(1))

' Создание объединения во избежание повторного учета _

пересекающихся участков выделенных диапазонов

Set rgSelUnion = Selection.Areas(1)

For Each rgArea In Selection.Areas

strCurSelType = dhGetAreaType(rgArea)

' Изменение надписи о типе всего выделения, если _

есть выделения различного типа

If strCurSelType <> strSelType Then

strSelType = «Множественный»