Excel. Трюки и эффекты — страница 15 из 36

Sub HideString()

Rows(2).Hidden = True

End Sub

В результате применения этого макроса будет скрыта строка 2.

Можно использовать также такой макрос (листинг 3.16).

Листинг 3.16. Скрытие нескольких строк

Sub HideStrings()

Rows(«3:5»).Hidden = True

End Sub

После его выполнения будут скрыты строки 3, 4 и 5.

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

Похожие макросы используются для управления отображением столбцов). Например, в результате выполнения макроса, код которого приведен в листинге 3.17, будет скрыт столбец В.

Листинг 3.17. Скрытие столбца

Sub HideCollumn()

Columns(2).Hidden = True

End Sub

Если в данном макросе заменить 2, например, на С, то будет скрыт столбец С (то есть в коде макроса можно указывать как порядковый номер столбца, так и соответствующую ему букву).

Для скрытия нескольких столбцов можно применить, например, такой макрос (листинг 3.18).

Листинг 3.18. Скрытие нескольких столбцов

Sub HideCollumns()

Columns(«E:F»).Hidden = True

End Sub

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

Чтобы включить отображение скрытых столбцов, необходимо в соответствующих макросах заменить значение True на False и запустить их на выполнение.

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

Листинг 3.19. Скрытие строки по имени ячейки

Sub HideCell()

Range(«Секрет»).EntireRow.Hidden = True

End Sub

После его применения будет скрыта строка, в которой находится ячейка с именем Секрет. Этот трюк удобно использовать, например, когда нужно срочно скрыть какие-либо данные, но адрес ячейки вспомнить не удается, а известно только ее имя. Однако при необходимости вместо имени можно указывать конкретный адрес ячейки (например, если в приведенном макросе заменить Секрет на А2, то будет скрыта строка 2).

Можно также указывать диапазон ячеек, строки с которыми нужно скрыть. Пример такого макроса приведен в листинге 3.20.

Листинг 3.20. Скрытие нескольких строк по адресам ячеек

Sub HideCell()

Range(«B3:D4»).EntireRow.Hidden = True

End Sub

После применения данного макроса будут скрыты строки 3 и 4.

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

Управлять отображением столбцов также можно, исходя из адреса или имени ячейки. Вот пример такого макроса (листинг 3.21).

Листинг 3.21. Скрытие столбца по имени ячейки

Sub HideCell()

Range(«Секрет»).EntireColumn.Hidden = True

End Sub

В данном случае будет удален столбец, содержащий ячейку Секрет. Здесь также можно указывать как имя, так и адрес ячейки (например, если в приведенном макросе заменить Секрет на C3, то будет скрыт столбец С).

Можно использовать такой макрос (листинг 3.22).

Листинг 3.22. Скрытие нескольких столбцов по адресам ячеек

Sub HideCell()

Range(«C2:D5»).EntireColumn.Hidden = True

End Sub

После применения данного макроса будут скрыты столбцы С и D.

Чтобы вновь включить отображение скрытых столбцов, нужно в соответствующих макросах заменить значение True на False.

Быстрое выделение ячеек, расположенных через интервал

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

Листинг 3.23. Выделение ячеек через интервал (вариант 1)

Sub IntervalCellSelect()

Dim intFirstRow As Integer ' Первая строка для выделения

Dim intLastRow As Integer ' Последняя строка для выделения

Dim rgCells As Range ' Объединение выделяемых ячеек

Dim intRow As Integer

intFirstRow = 3

intLastRow = 300

' Формирование объединения ячеек в столбце "B" от строки _

intFirstRow до строки intLastRow с шагом 3

For intRow = intFirstRow To intLastRow Step 3

If rgCells Is Nothing Then

' Первая ячейка в объединении

Set rgCells = Cells(intRow, 1)

Else

' Добавление очередной ячейки в объединение

Set rgCells = Union(rgCells, Cells(intRow, 1))

End If

Next

' Выделение всех ячеек в объединении

rgCells.Select

End Sub

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

Точно такой же результат (быстрое выделение ячеек с 3 по 300 в столбце А) можно получить, применив такой макрос (листинг 3.24).

Листинг 3.24. Выделение ячеек через интервал (вариант 2)

Sub IntervalCellSelect()

Dim intFirstRow As Integer ' Первая строка для выделения

Dim intLastRow As Integer ' Последняя строка для выделения

Dim rgCells As Range ' Объединение выделяемых ячеек

Dim cell As Range ' Текущая ячейка

Dim intRow As Integer

intFirstRow = 3

intLastRow = 300

' Формирование объединения ячеек в столбце "B" от строки _

intFirstRow до строки intLastRow с шагом 3

For intRow = intFirstRow To intLastRow Step 3

Set cell = Cells(intRow, 1)

Set rgCells = Union(cell, _

IIf(intRow = intFirstRow, cell, rgCells))

Next

' Выделение всех ячеек в объединении

rgCells.Select

End Sub

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

Для выделения различных диапазонов и ячеек можно применить следующий макрос (листинг 3.25).

Листинг 3.25. Выделение нескольких диапазонов

Sub SelectRange()

Range(«D3:D10, A3:A10 , F3»).Select

End Sub

В результате выполнения данного макроса будут выделены диапазоны D3:D10, АЗ:А10 и ячейка F3.

Определение количества ячеек в диапазоне и суммы их значений

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

Листинг 3.26. Сумма данных диапазона

Sub CalculateSum()

Dim i As Integer

Dim intSum As Integer

' Расчет суммы ячеек столбца "A" (с первой по пятую)

For i = 1 To 5

intSum = intSum + Cells(i, 1)

Next

MsgBox "Сумма ячеек: " & intSum

End Sub

В подобном случае будет рассчитана сумма диапазона ячеек с 1 по 5, которые расположены в столбце А. Результат работы данного макроса представлен на рис. 3.7.

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

Рис. 3.7. Рассчитанная сумма диапазона ячеек

Листинг 3.27. Сумма ячеек с числовыми значениями

Sub CalculateSum()

Dim i As Integer

Dim intSum As Integer

' Расчет суммы ячеек столбца "A" (с первой по пятую)

For i = 1 To 5

If IsNumeric(Cells(i, 1)) Then

intSum = intSum + Cells(i, 1)

End If

Next

MsgBox "Сумма ячеек: " & intSum

End Sub

После запуска данного макроса будет рассчитана сумма диапазона ячеек с 1 по 5, расположенных в столбце А, при этом ячейки с нечисловыми значениями будут проигнорированы.

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

Листинг 3.28. Подсчет количества ячеек

Sub CountOfCells()

MsgBox (Range(«A1:A20, D1:D20»).Count)

End Sub

После выполнения данного макроса на экране отобразится окно, в котором будет указано общее количество ячеек в диапазонах А1:А20 и D1:D20.

Подсчет именованных объектов

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

Листинг 3.29. Количество именованных объектов

Sub CountNames()

Dim intNamesCount As Integer

' Получаем и отображаем количество имен в активной _

рабочей книге

intNamesCount = ActiveWorkbook.Names.Count

If intNamesCount = 0 Then

MsgBox «Имен нет»

Else

MsgBox "Имен: " & intNamesCount & « шт.»

End If

End Sub

Результат выполнения этого макроса выводится в информационном окне, которое показано на рис. 3.8.

Рис. 3.8. Подсчет количества имен


При необходимости можно подсчитать количество имен рабочей книги. Соответствующий макрос выглядит так (листинг 3.30).

Листинг 3.30. Количество имен рабочей книги

Sub CountNames()

Dim intNamesCount As Integer

' Получаем и отображаем количество имен на активном _