Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
250
Добавлен:
12.04.2015
Размер:
2.2 Mб
Скачать

Лабораторная работа №6 программирование вложенных циклов

Цель: Освоить составление циклических программ с вложенными циклами.

Указания по выполнению

1. В данной лабораторной работе необходимо составить макрос, ко­торый в выделенном диапазоне ячеек подсчитывает количество по­ложительных, нулевых и отрицательных значений, записывает ре­зультаты в смежную с диапазоном колонку и выделяет цветом ячейки с положительными значениями. Например, на рис. 6.1 представлен результат выполнения макроса в случае, если выделен диапазон ячеек В2:С5.

А

В

С

D

Е

1

2

1,5

-21

3

Количество положительных значений

3

0

6

2

Количество нулевых значений

4

9

0

3

Количество отрицательных значений

5

11

-7

Рис. 6.1. Результаты обработки диапазона В2:С5

Для этого:

а) перейдите из Excel в среду программирования VBA;

б) добавьте в рабочую книгу новый модуль и в окне редактиро­вания модуля наберите команды:

Public Sub Диапазон_ячеек()

' В макросе используются следующие переменные:

' КР - количество положительных значений

' KNколичество нулевых значений

' КО — количество отрицательных значений

' NR - число строк в выделенном диапазоне

' NCчисло колонок в выделенном диапазоне

' NumO/Row - номер строки первой ячейки диапазона

' NumOfCol - номер колонки первой ячейки диапазона

' Item - значение текущей ячейки

' i - номер текущей строки диапазона

' j - номер текущей колонки диапазона

Dim КР As Integer, KN As Integer, КО As Integer

Dim NR As Integer, NC As Integer

Dim NumOfRow As Integer, NumOfCol As Integer Dim Item As Variant, i As Integer, j As Integer NR = Selection.Rows.Count NC = Selection.Columns.Count NumOfRow = Selection.Row NumOfCol = Selection.Column ' Цикл For i... Next i является внешним по ' отношению к циклу Forj ... Nextj For i = 1 To NR ' Цикл по строкам

' Цикл Forj ... Nextj является вложенным

' по отношению к циклу For i... Next i

Forj = 1 To NC ' Цикл по колонкам

Item = Selection.CeIls(i, j)

If IsNumeric(Item) Then ' Если значение в ячейке - числовое

If Item > 0 Then

КР = КР+1

Selection.Cells(i, j).Font.Color = vbRed

End If

If Item = 0 Then KN = KN + 1

If Item < 0 Then КО = КО + 1

End If

Nextj

Next i

' Запись результатов на рабочий лист

' в смежную с выделенным диапазоном колонку Cells(NumOfRow, NumOfCol + NC) = КР

Cells(NumOfRow, NumOfCol + NC + 1) = _

"Количество положительных значений" Cells(NumOfRow + 1, NumOfCol + NC) = KN Cells(NumOfRow + 1, NumOfCol + NC + 1) = _

"Количество нулевых значений"

Cells(NumOfRow + 2, NumOfCol + NC) = КО Cells(NumOfRow + 2, NumOfCol + NC + 1) = _

"Количество отрицательных значений"

End Sub

  1. Вернитесь в Excel, заполните различными данными диапазон ячеек A2:D6, выделите диапазон и выполните макрос. Как выглядит таблица после работы макроса?

  2. Цикл Forj = 1 То NC ... Nextj является вложенным по отноше­нию к циклу For i = 1 То NR ... Next i. Это означает, что вначале будут последовательно перебираться ячейки с номерами (1, 1), (1, 2) ... (1, NC) при i = 1, затем - (2, 1), (2, 2) ... (2, NC) при i = 2 ..., и т.д. до ячеек с номерами (NR, 1), (NR, 2) ... (NR, NC) при i = NR. Какое значение переменных i и] соответствует ячейке с адресом ВЗ?

  1. Самостоятельно составьте макросы для решения задач из числа приведенных в приложении G согласно своего варианта.

  2. Запишите составленные макросы в модуль, заполните различ­ ными данными диапазон ячеек СЗ:Е7 для первого макроса и G2:J5 для второго макроса и выполните каждый макрос, предварительно выделив нужный диапазон. Текст макросов, контрольные примеры и результаты приведите в отчете по лабораторной работе.

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

  1. В какой переменной будут чаще изменяться значения (i или j) в макросе "Диапазон_ячеек"?

  2. Какие изменения следует внести в макрос, чтобы вместо выделения числа цветом изменялся цвет фона ячейки?

  3. Какие значения принимают переменные NR и NC в макросе, если выделить диапазон А1:С4?

  4. Каким образом следует изменить команду "For i = 1 То NR", чтобы выбирать только нечетные строки выделенного диапазона?

  5. Каким образом следует изменить команду "For j = 1 То NC", чтобы выбирать только четные колонки выделенного диапазона?

  6. Объясните назначение команд составленного вами макроса.