Необходимо создать макрос (процедуру-подпрограмму), обеспечивающий следующие действия:
- отмену ранее существующей заливки ячеек таблицы;
- заливку установленным по заданию цветом ячеек таблицы. Критерии ячеек определяются по заданию.
Макрос не должен меняться при изменении количества строк в таблице.
Сначала сделаю общее описание выполнения, а в следующих сообщениях приведу тексты макросов по вариантам.
Сам принцип выполнения задания такой же, как и в предыдущих пунктах, только берется не одномерный массив элементов или ячеек, а двухмерный. Будем использовать вложенный цикл для обработки данных по строкам и столбцам.
Для создания макроса нужно перейти на вкладку «Разработчик» и нажать кнопку «Макросы». Появится список макросов, которые уже созданы (если они есть). В поле «Имя макроса» введем имя, например, «Заливка_ячеек» и нажмем кнопку «Создать». Редактор кода создаст новый модуль с заготовкой нашего макроса.
Если еще раз вызвать список макросов и выбрать там наш созданный макрос, то будут доступны разные кнопки, в том числе «Параметры». Нажмем ее, откроется окно с параметрами макроса. Здесь можно ввести описание макроса и назначить горячие клавиши для запуска макроса. Создадим комбинацию «Ctrl+m»:
Переходим к тексту макроса.
Что еще общего для всех вариантов.
Во-первых, результат работы макроса не должен зависеть от числа строк в таблице, во-вторых, нужно отменять предыдущую заливку ячеек.
За заливку отвечает объект Interrior, который относится к диапазону ячеек и имеет свойство Pattern. Чтобы убрать заливку, нужно установить это свойство равным xlPatternNone.
Поскольку макрос должен работать для разного числа строк, необходимо каждый раз при запуске определять количество строк отдельно. Это можно сделать несколькими способами. Приведу два из них.
1. В цикле проводим перебор всех строк диапазона с данными и смотрим, не пустая ли первая ячейка каждой строки. Если пустая, то данные кончились. Запоминаем номер строки и используем его дальше в цикле. При этом переборе заодно можно производить и другие действия, которые требуются по заданию, например, можно определить минимальное или максимальное значение во всех строках с данными. Пример:
Пример:
1 вариант
2 вариант
3 вариант
4 вариант
5 вариант
6 вариант
7 вариант
8 вариант
9 вариант
Общий список всех сообщений по этой работе
- отмену ранее существующей заливки ячеек таблицы;
- заливку установленным по заданию цветом ячеек таблицы. Критерии ячеек определяются по заданию.
Макрос не должен меняться при изменении количества строк в таблице.
Сначала сделаю общее описание выполнения, а в следующих сообщениях приведу тексты макросов по вариантам.
Сам принцип выполнения задания такой же, как и в предыдущих пунктах, только берется не одномерный массив элементов или ячеек, а двухмерный. Будем использовать вложенный цикл для обработки данных по строкам и столбцам.
Для создания макроса нужно перейти на вкладку «Разработчик» и нажать кнопку «Макросы». Появится список макросов, которые уже созданы (если они есть). В поле «Имя макроса» введем имя, например, «Заливка_ячеек» и нажмем кнопку «Создать». Редактор кода создаст новый модуль с заготовкой нашего макроса.
Если еще раз вызвать список макросов и выбрать там наш созданный макрос, то будут доступны разные кнопки, в том числе «Параметры». Нажмем ее, откроется окно с параметрами макроса. Здесь можно ввести описание макроса и назначить горячие клавиши для запуска макроса. Создадим комбинацию «Ctrl+m»:
Переходим к тексту макроса.
Что еще общего для всех вариантов.
Во-первых, результат работы макроса не должен зависеть от числа строк в таблице, во-вторых, нужно отменять предыдущую заливку ячеек.
За заливку отвечает объект Interrior, который относится к диапазону ячеек и имеет свойство Pattern. Чтобы убрать заливку, нужно установить это свойство равным xlPatternNone.
Поскольку макрос должен работать для разного числа строк, необходимо каждый раз при запуске определять количество строк отдельно. Это можно сделать несколькими способами. Приведу два из них.
1. В цикле проводим перебор всех строк диапазона с данными и смотрим, не пустая ли первая ячейка каждой строки. Если пустая, то данные кончились. Запоминаем номер строки и используем его дальше в цикле. При этом переборе заодно можно производить и другие действия, которые требуются по заданию, например, можно определить минимальное или максимальное значение во всех строках с данными. Пример:
r = 3 'значения начинаются с 3 строки2. В этом варианте мы применяем пользовательский диапазон UsedRange. При этом Excel самостоятельно определяет, где заканчиваются данные – последняя заполненная строка. Дальше уже используем число строк (Sheets(1).UsedRange.Rows.Count) пользовательского диапазона для циклов. Этот вариант быстрее и понятней, чем первый, но нужно смотреть, чтобы не было пустых строк, иначе выдаст ошибку при расчетах.
minD = Cells(3, 4) 'первое значение устанавливаем как минимальное
'в цикле по строкам проверяем, чтобы ячейка с названием предприятия была непустая
'иначе цикл прекращается
Do While Cells(r, 1) <> Empty
'цикл по столбцам - дням недели
For c = 4 To 9
'если минимум больше текущего значения, то устанавливаем новое значение
'минимума
If minD > CInt(Cells(r, c)) Then minD = CInt(Cells(r, c))
Next c
'переход на следующую строку
r = r + 1
Loop
'очищаем заливку всего диапазона ячеек со значениями выпуска
Range(Cells(3, 4), Cells(r - 1, 9)).Interior.Pattern = xlPatternNone
Пример:
Dim rng As RangeИ в конце не забываем освобождать память:
'установка пользовательского диапазона
'для определения количества занятых строк
Set rng = Sheets(1).UsedRange
'отмена предыдущей заливки
Range(rng.Cells(3, 4), rng.Cells(rng.Rows.Count, 10)).Interior.Pattern = xlNone
Set rng = Nothing 'Освобождение памятиДля запуска макроса открываем наш лист с данными и используем комбинацию клавиш Ctrl+m, не забывая отскринить для отчета состояние таблицы данных до запуска и после запуска макроса.
Варианты задания:
0 вариант1 вариант
2 вариант
3 вариант
4 вариант
5 вариант
6 вариант
7 вариант
8 вариант
9 вариант
Общий список всех сообщений по этой работе
