Зараз обговорюють

"Тобто є ряд завдань, які взагалі без рекурсії не наважуються."  - це як розуміти? Перефразуй, будь ласка. 

виправив, йшлося про те що деякі завдання можна вирішити лише при використанні рекурсії

Спасибі дуже корисна стаття

А ще щось планується подібного найближчим часом?


Дякую за підтримку, радий що Вам сподобалось!

Так маю вже майже дороблений проект по управлінні Audio файлом, на заміну стандартним клавішам управління HTML5, але ще не встиг відтестувати програвання файлів з інтернету, поки лише локально працює

Надіюсь найближчим часом дороблю й закину

Рахунки

webmoneyeur - E385818210641
usd - Z304643423050
uah - U354026817492
rub - R301704373231easypay80002677bitcoin1F5HRGroUtEQW9HBNbeew8iKh5KQ8vJxzw

Зворотній зв'язок

Для покращення роботи сайту надсилайте свої зауваження:
mailЗауваження
mailПропозиція

Статистика

UkrNET - поисково-информационный ресурс

VBA : Масиви їх класифікація, оголошення та використання

Так що ж таке масив?

Масив це набір елементів однакового типу, які мають загальне ім'я. А звернення до цих елементів відбувається по їх індексу. Простіше кажучи, це безліч змінних зібраних в одну групу за певним типом. Для більш ясного розуміння візьмемо, наприклад, групу студентів К-1. Так ось, К-1 це масив даних, а студенти які знаходяться в групі К-1 є її елементами масиву згідно певного порядку.

Перевагами використання масивів є:

- можливість групування великої кількості даних в один масив, замість створення для кожного елемента окремої змінної

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

Примітка: обробку масивів значно спрощує використання циклів, для перебору індексів масиву.

Вимірність масиву:

- одновимірними (лінійними), той же перелік студентів

- багатовимірними - двовимірні (матриці, 2D)

- тривимірні і т.д.

По розміру масиви ділять на два види:

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

- динамічні - число елементів і розмірність змінюється в процесі роботи програми.

Одновимірні масиви

Одновимірна масив - це найпростіший варіант масиву, який використовує звичайний список даних. Наприклад: Василь, Петро, Микола, Михайло, Іван, Ярослав, Ігор, Юра, Олександр, Володимир. Це строковий масив, що складається з 10 елементів. Дамо йому назву myArray.

Dim myArray As Variant
    myArray = Array("Василь", "Петро", "Микола", "Михайло", "Іван", "Ярослав", "Ігор", "Юра", "Олександр", "Володимир")

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

Для доступу до даних, що зберігаються в певному елементі масиву, слід вказувати ім'я масиву з подальшим числом, званим індексом елемента. Індекс завжди вкладається в круглі дужки. Наприклад: myArray(3) - цього елементу нашого масиву відповідає "Михайло" (не забувайте, що за замовчуванням нумерація елементів масиву починається з 0).

Sub Test()
Dim myArray As Variant
    myArray = Array("Василь", "Петро", "Микола", "Михайло", "Іван", "Ярослав", "Ігор", "Юра", "Олександр", "Володимир")
    Debug.Print myArray(3)
End Sub 

Оскільки нумерація з нульовою базою може бути не досить зручною (тому що ми звикли рахувати з 1, а не з 0), то в VBA є директива компілятора, що дозволяє виправити цю "незручність": Option Base, але рекомендуємо звикати до нумерації з 0 в написанні ваших програм.

Директива компілятора має два варіанти написання: Option Base 0 - індекси масивів починаються з 0 (установка за замовчуванням) Option Base 1 - індекси масивів починаються з 1. Дана директива компілятора поміщається в область оголошень модуля перед оголошеннями будь-яких змінних, констант або процедур. Ніколи не кладіть Option Base всередині процедури. Можна мати тільки один оператор Option Base в модулі, який впливає на всі масиви, які оголошуються в модулі.

Багатовимірні масиви

Одномірні масиви добре підходять для подання простих списків даних. Однак часто буває необхідно представити таблиці даних в програмах з організацією даних в форматі рядків і стовпців, подібно осередкам в робочих аркушах Excel. Для цього необхідно використовувати багатовимірні масиви. Так адресу кожного осередку листа складається з двох чисел, одне з яких (номер рядка) є першим індексом, а друге (номер стовпчика) - другим індексом масиву. Такий масив називається двовимірним масивом. Додавши ще номер листа, отримаємо тривимірний масив. VBA дозволяє створювати масиви, що мають до 60 вимірювань.

 Статичні і динамічні масиви

Масиви, що не міняють число своїх елементів, називаються статичними масивами. Прикладом такого масиву може служити вищенаведений масив myArray, що містить 10 елементів, але в даному випадку розмір масиву ми оголошуємо одразу і присвоюємо кожному індексу масиву відповідне значення.

Статичні масиви оголошуються із зазначенням верхньої і нижньої межі:
Dim myArray (0 to 49) as Variant 
Оголосити масив також можна вказавши тільки кількість елементів:
Dim myArray (50) as Variant 
Для оголошення багатовимірних масивів використовується запис наступного виду:
Dim Matrix2D (0 to 9, 0 to 9) as Variant
Dim Matrix3D (10, 10, 10) as Variant 'тривимірний масив'
Dim Matrix4D (10, 10, 25, 5) as Variant 'чотиривимірний масив'
'і т.д.'

Однак бувають ситуації, коли спочатку невідомо кількість елементів в масиві, або ж, в процесі роботи ця кількість може змінюватися. Такі масиви називаються динамічними масивами.

Динамічний масив може збільшуватися або стискатися, щоб вміщати точно необхідну кількість елементів без марного витрачання пам'яті.

Так як динамічний масив - не має визначеного кількості елементів і визначається без вказівки в дужках кордонів:

Dim myArray () as Variant 

Але динамічний масив можна буде використовувати тільки після програмного визначення меж, після ключового слова ReDim:

i = 4
Redim myArray (i)
x = i + 13
Redim myArray (x)

після перевизначення кількості елементів масиву, всі елементи обнуляються. Для того щоб зберегти значення елементів масиву, після ReDim необхідно додати ключове слово Preserve:

Redim Preserve myArray (x)

Так само можливо перевизначити розмірність масивів, наприклад з одновимірного на двох-трьох-мірний:

Dim myArray () as Variant
i = 4
Redim myArray (i)
j = i + 13
Redim myArray (i, j)

Примітка: врахуйте, що при перевизначенні розмірності масиву, використання ключового слова Preserve для збереження значень елементів - неможливо!

Очищення і видалення масивів за допомогою Erase

Оператор Erase дозволяє виконувати очистку для статичних масивів і видалення - для динамічних.

Коли елементи масиву заповнені, дані в масиві залишаються до тих пір, поки користувач не присвоїть нові значення елементів масиву або поки VBA не визволиться від масиву. Найчастіше буває, що в подальших обчисленнях динамічний масив ні за яких обставин використовуватися не буде, тому недоцільно "тримати" його в пам'яті комп'ютера, тому що це може позначитися на швидкості роботи програми. Або ж може знадобитися очистити всі значення в статичному масиві, встановлюючи числові значення на 0, а строкові - на порожні рядки. Це можна здійснити за допомогою вкладених циклів - як було показано на попередньому уроці. Але, можна зробити набагато простіше:

Erase myArray

Даний оператор обнуляє (якщо масив статичний), або очищає (якщо динамічний) масив myArray.

Оператор Erase видаляє з пам'яті динамічні масиви, звільняючи область пам'яті, раніше використовувану цим масивом. При видаленні динамічного масиву за допомогою оператора Erase необхідно повторно створити масив за допомогою оператора ReDim перед тим, як можна буде використовувати цей певний динамічний масив знову.

Поведінка оператора Erase для статичних масивів залежить від конкретного типу елементів масиву:

Тип статичного масивуДія оператора Erase
числовийВстановлює елементи масиву на 0
StringВстановлює елементи масиву на рядок нульової довжини, а для рядків фіксованої довжини - як всі символи пробілу
VariantВстановлює елементи масиву на Empty
ObjectВстановлює елементи масиву на Nothing

Функції для роботи з масивами

Filter

відбирає у вихідний масив рядки вхідного масиву відповідно до заданого зразка значення(або тільки містять входження заданого зразка, або тільки не містять).

Filter (SourceArray, Match [, Inclule, [Compare]])

SourceArray - Обов'язковий аргумент - одновимірний масив рядків, в якому проводиться пошук

Match - Обов'язковий аргумент, що містить пошуковий рядок-зразок для відбору (фільтрації)

Include - Необов'язковий аргумент, що містить логічне значення (Boolean) і в якому зазначено, включати або не включати в якості відповіді пошуковий рядок-зразок. Якщо приймає значення True, значить повертаються значення які містять пошуковий рядок-зразок, якщо False, то результат не містить пошуковий рядок-зразок

- Compare - Необов'язковий аргумент - число, яке вказує на використовуваний вид порівняння:

- vbUseCompareOption = -1 - Використовуються установки, що задаються оператором Option Compare. Використовується за замовчуванням

- vbBinaryCompare = 0 - Двійкове порівняння. Порівняння рядків проводиться за внутрішніми кодами символів, що визначаються кодовою сторінкою. Букви різних регістрів вважаються різними

- vbTextCompare = 1 - Текстове порівняння. Порівняння рядків без урахування регістру на основі системної національної настройки

- vbDatabaseCompare = 2 - Порівняння на основі установок, прийнятих в оброблюваної базі даних. Застосовується в MS Access

Sub Test()
    Dim myArray
    myArray = Array("Весна", "Літо", "Осінь", "Зима")
    Debug.Print Join(Filter(myArray, "а"), "-") 'виводить усі значення де наявна буква "а"'
    Debug.Print Join(Filter(myArray, "А"), "-") 'виводить усі значення де наявна буква "А"'
    Debug.Print Join(Filter(myArray, "А", True, vbTextCompare), "-") 'виводить усі значення де наявна буква "А"'
    Debug.Print Join(Filter(myArray, "А", False, vbTextCompare), "-") 'виводить усі значення де відсутня буква "А"'
End Sub 

LBound, UBound

повертають нижню і верхню граничні значення індексів статичного або динамічного масиву. Синтаксис: LBound (arrayName [, dimension]) UBound (arrayName [, dimension]) arrayName - ім'я масиву dimension - ціле число (необов'язковий аргумент). Визначає вимір масиву, для якого треба отримати верхню чи нижню межу. При відсутності dimension повертається межа для першого виміру масиву. Наведений нижче лістинг демонструє використання функцій LBound, UBound:
Sub Test()
Dim myArray As Variant
    myArray = Array("Перший елемент", "Другий елемент", "3", 4, "Останній")
    For i = LBound(myArray) To UBound(myArray)
        ThisWorkbook.Sheets(1).Range("A" & i + 1) = myArray(i)
    Next i
End Sub 

Join

можливість злити безліч рядків з масиву рядків в одну строкову змінну. Як роздільник за замовчуванням використовується пробіл, можна вказати свій роздільник.

Sub Test()
Dim myArray As Variant
	myArray = Array("Перший елемент", "Другий елемент", "3", 4, "Останній")
    Debug.Print Join (myArray, "-")
End Sub 

Split

зворотня функція, що розбиває рядок на масив рядків. Як роздільник за замовчуванням використовується пробіл, можна вказати свій роздільник.
Sub Test()
    Dim myArray As Variant
	myArray = Split("Перший елемент-Другий елемент-3-4-Останній", "-")
    Debug.Print myArray(2)
End Sub 

view2884like1dislike0 avatard_l4w clock 2016-08-29 23:36

Коментарі:



Для даної статті відсутні коментарі

Про нас

"Programmers World" розроблено з метою полегшення в освоєнні навичок програмування, та поширення матеріалів з сфери ІТ Українською мовою.

Кожен бажаючий може безкоштовно користуватися ресурсами сайту, щоб:

- Вивчати теоретичні аспекти мов програмування

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

- Розміщати свої завдання на форумі для допомоги в їх реалізації, або готового коду який може бути корисний іншим користувачам

- Спілкуватись з іншими користувачами та обмінюватись досвідом

Сайт функціонує на безопланій основі та ентузіазмі розробника, якщо Ви бажаєте долучитись до розвитку даного проекту то можете пожертвувати кошти на рахунки розміщені в блоці "Допомога сайту".

Сайт

Зареєстровані користувачі можуть скористатися системою діалогів, в профілі користувача, для отримання потрібної інформації. Написати!

Також Ви можете використати форми відправки Зауважень та Пропозицій.


Електронна пошта

Ви можете звертатись на нашу поштову скриньку site.programmersworld@gmail.com

www.000webhost.com