Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Excel_new.doc
Скачиваний:
97
Добавлен:
22.02.2015
Размер:
5.05 Mб
Скачать
      1. Циклы объектного типа

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

Структура цикла:

For Each var In mmm

..........................................

Exit For

..........................................

Next var

Элемент var представляет переменную типа Variant, mmm является набором объектов (например, блок ячеек). Структура For Each может быть применена к массиву, если обрабатываются все его элементы. В этом случае не требуется оперировать индексами. Единственное, что нельзя сделать с массивом с помощью цикла For Each, - это изменить содержимое. Переменная цикла содержит значение элемента массива, но изменение этого значения не изменяет соответствующий элемент массива.

В Visual Basic, как правило, требуется указать объект перед выполнением одного из его методов или изменением одного из его свойств. С помощью оператора With можно указать объект только один раз для последовательности операторов.

Пример. Функция, вычисляющая сумму элементов массива:

Function SumArray(theArray)

Sum = 0

For Each element In theArray

Sum = Sum + element

Next element

SumArray = Sum

End Function

Пример двойного цикла

Function Multiplay(ParamArray Bloc()) As Single

' умножение элементов массивов с проверкой - является ли объект массивом

Dim Product As Single, part, value

Product = 1

For Each part In Bloc 'Внешний цикл по блокам

If TypeName(part) = "Range" Or Right(TypeName(part), 2) = "()" Then

For Each value In part 'Внутренний цикл по элементам блока

Product = Product * value 'Произведение элементов

Next value

Else

Product = Product * part 'Произведение элементов, если Bloc - не массив

End if

Next part

Multiplay = Product

End Function

      1. Передача массива данных в таблицу

Самым простым способом переноса содержимого массива на лист является использование цикла, например For...Next. Этот цикл предоставляет возможность одновременного индексирования внутри массива и переноса элементов массива по их адресам назначения. Тот же результат может быть получен и без применения цикла, с использованием свойства FormulaArray для объекта типа Range.

В VB одномерный массив имеет вид строки. Следовательно, если диапазон ячеек листа, в который заносится содержимое массива, является также строкой, то для передачи массива достаточно одного оператора FormulaArray. Например:

Sub Array1()

'Для одномерного массива

Dim x(1 To 10) As Double

'Описание массива из 10 элементов

For j = 1 To 10

'Вычисление значений массива

x(j) = j * j

Next j

'Перенос содержимого массива в строку листа

Range(Cells(2,1), Cells(2,10)).FormulaArray = x

End Sub

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

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

Sub array2()

Dim x(1 To 10, 1 To 1) As Double

'Вычисление значений массива

For j = 1 To 10

x(j,1) = j*j

Next j

'Перенос содержимого массива в столбец листа

Range(Cells(1,2), Cells(10,2)).FormulaArray = x

End Sub

Двумерный массив, приведенный в этом примере, позволяет представить данные массива в виде столбца, следовательно, массив можно перенести на лист без применения цикла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]