Основи програмування на 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