Основи програмування на vba

ВИКОРИСТАННЯ МАСИВІВ
ЯК АРГУМЕНТІВ ПРОЦЕДУР І ФУНКЦІЙ

VBA допускає використання масивів як аргументи процедур і функцій. В цьому випадку масив-параметр оголошується як динамічний масив інструкцією виду:

[ByVal | ByRef] імяМассіва () As тип, де

ByVal - VBA передає аргумент-масив за значенням,

ByRef - VBA передає аргумент-масив за посиланням,

Тип - будь-який з допустимих типів.

Не рекомендується передавати масиви в якості аргументів процедур і функцій за значенням, тому що в цьому випадку швидко вичерпуються ресурси пам'яті ПК.

Продемонструємо використання масивів як аргумент процедури-функції
на прикладах сортування одновимірного числового масиву.

Сортування методом прямого вибору

Цей метод зазвичай застосовується для масивів, що не містять повторюваних елементів.
Можна діяти наступним чином:

- вибрати мінімальний елемент масиву;

- поміняти місцями з першим елементом (після цього найменший буде стояти на своєму місці);

- повторити попередні пункти з рештою елементами, тобто розглянути частину масиву від другого до останнього, знайти мінімальний в ньому елемент і поміняти його з другим і т.д. поки не залишиться один найбільший елемент, вже стоїть на своєму місці.

Всього буде потрібно m - 1 раз виконати цю послідовність дій. В ході сортування буде збільшуватися відсортована частина масиву, а не відсортована, відповідно, зменшуватися.

Function МетодПрямВибора (ByRef y () As Integer, ByVal m As Byte)

Dim k As Byte, j As Byte, L As Byte

If y (j)

Якщо в перевіряється умови знак "<” заменить на “>". то масив буде відсортований за спаданням.

Сортування методом прямого обміну (бульбашки)

Function Методом прямого обміну (ByRef y () As Integer, ByVal m As Byte)

Dim d As Integer, k As Byte, j As Byte

For j = m To k Step -1

У методах прямого вибору і бульбашки вихідні елементи масиву повинні бути в наявності до початку сортування.

Проілюструємо роботу обох методів сортування одновимірного числового масиву, що використовують в якості аргументу функції масив вихідних даних при вирішенні наступних завдань:

Приклад 7. Задано одновимірний числовий масив. Знайти найбільший і найменший його елементи.

Dim x () As Integer, n As Byte, i As Byte

n = Application.CountA (ActiveSheet.Range ( "A. A"))

MsgBox "Найбільший елемент масиву =" Format (x (m), "0.000")

MsgBox "Найменший елемент масиву =" Format (x (1), "0.000")

Функція CountA () з бібліотеки MS Excel дозволяє підрахувати кількість непустих осередків в стовпці А активного (обраного) робочого листа.

Чи прийме 8. Задана впорядкована числова послідовність і деяке число. Вставити заданий число в вихідну послідовність, не порушуючи порядок.

Dim x () As Integer, число As Integer, i As Integer, j As Integer

Const n As Byte = 10

Sheets ( "Лист 1") .Select