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

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

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

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

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


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

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

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

Рахунки

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

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

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

Статистика

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

VBA : Колекція Range. Властивості та методи

В написанні програм на VBA часто приходиться працювати з осередками. Отже розглянемо більш детально можливості роботи із ними.

Примітка: Для зручності і уникнення помилок в роботі Ваших програм рекомендую використовувати повний шлях до потрібного Вам осередку, тобто ThisWorkbook.Sheets(1).Range("A1"). Якщо не вказувати повного шляху операції будуть проводитись із осередком на активному аркуші, що часто призводить до виникнення помилок в коді.

Присвоєння

Якщо необхідно пристроїти значення певному осередку досить зручно використовувати Range

Розглянемо приклад: Необхідно проставити в діапазоні A1:A4 значення 2

перший спосіб присвоєння значення

ThisWorkbook.Sheets(1).Range("A1") = 2
ThisWorkbook.Sheets(1).Range("A2") = 2
ThisWorkbook.Sheets(1).Range("A3") = 2
ThisWorkbook.Sheets(1).Range("A4") = 2

другий спосіб присвоєння значення

ThisWorkbook.Sheets(1).Range("A1:A4") = 2

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


Об єднання

Sub Test ()
	Dim HelloRange As Range
		ThisWorkbook.Sheets(1).Activate
		Set HelloRange = ThisWorkbook.Sheets(1).Range("D3:D10, A3:A10, F3")	'об'єднуємо осередки в одну змінну (для об'єднання обов'язково записуємо через кому)
		HelloRange = "Hello"
End Sub 

Результатом буде виведений запис Hello в A3:А10, D3:D10 та F3


Перетин

Sub Test ()
	Dim HelloRange As Range
	ThisWorkbook.Sheets(1).Activate
		Set HelloRange = ThisWorkbook.Sheets(1).Range("A1:A20 A8:D8")	'записуємо перетин осередків в змінну (для перетину обов'язково записується без коми)
		HelloRange = "Hello"
End Sub 

Результатом буде виведений запис Hello в A8 так як між двома осередками лише тут вони перетинаються.

Використовуючи перетину і об'єднання можна будувати область будь-якого рівня складності.


Найбільш вживані властивості та методи:

Activate

виділяє поточний діапазон і встановлює курсор введення на його перший осередок.

Sub Test()
    ThisWorkbook.Sheets(1).Range("A2").Activate	'активує осередок А2
End Sub 

Address

дуже корисна властивість яка дозволяє повернути адресу клітинки яка обробляється

Sub Test ()
    ThisWorkbook.Sheets(1).Range("A3, A6, A9") = "Hello World"	'для прикладу заповнимо деякі дані'
    For i = 1 To 10
        If ThisWorkbook.Sheets(1).Range("A" & i) <> "" Then	'перевіряємо чи не пусте значення
            Debug.Print ThisWorkbook.Sheets(1).Range("A" & i).Address	'виводимо адресу непустої комірки в форматі ($A$3)
        End If
    Next i
End Sub 

Copy

можливість скопіювати діапазон в інше місце. Якщо місце призначення не вказано, він копіюється в буфер обміну. Аналогічно працює метод Cut (), при якому дані вихідного діапазону вирізаються.

Sub Test()
    ThisWorkbook.Sheets(1).Range("A2").Copy	'копіює дані з А2 в буфер
End Sub 

Count

Sub Test ()
	Dim HelloRange As Range
		ThisWorkbook.Sheets(1).Activate
		Set HelloRange = ThisWorkbook.Sheets(1).Range("A1:A20, D1:D20")
		Debug.Print HelloRange.Count
End Sub 

Clear та її варіації

дозволяє очистити вміст діапазону - від значень, форматування, коментар і т.п.

Sub Test()
    ThisWorkbook.Sheets(1).Range("A3").Clear  'очищує все'
    ThisWorkbook.Sheets(1).Range("A3").ClearComments  'очищує примітки'
    ThisWorkbook.Sheets(1).Range("A3").ClearContents  'очищує вміст'
    ThisWorkbook.Sheets(1).Range("A3").ClearFormats  'очищує формати'
    ThisWorkbook.Sheets(1).Range("A3").ClearHyperlinks  'очищує гіперпосилання'
    ThisWorkbook.Sheets(1).Range("A3").ClearNotes  'очищує контур'
    ThisWorkbook.Sheets(1).Range("A3").ClearOutline
End Sub 

Cut

дозволяє вирізати осередок

Sub Test()
    ThisWorkbook.Sheets(1).Range("A4:E12").Cut
    ThisWorkbook.Sheets(1).Range("A13").Select
    ActiveSheet.Paste
End Sub 

Delete

видаляє дані поточного діапазону. Як необов'язкового параметра можна визначити, з якого боку будуть зрушуватися осередки на місце видалених: xlShiftToLeft, або xlShiftUp. Якщо цей аргумент опущений, то Microsoft Excel вирішує на підставі форми діапазону.

Sub Test()
    ThisWorkbook.Sheets(1).Range("A3:H13").Delete xlShiftUp
End Sub 

End

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

Доступні 4 параметри xlUp, xlDown, xlToRight, xlToLeft

Sub Test()
    If ThisWorkbook.Sheets(1).Range("B2") <> "" Then
        counter = ThisWorkbook.Sheets(1).Range("B1").End(xlDown).Row
    Else
        counter = 1
    End If
    Debug.Print counter
End Sub 

При не пустих значеннях B1 та B2 буде обчислено і виведено номер останнього заповненого рядка, якщо В5 пусте, а В6 заповнене то дана конструкція поверне 4 так як End перебирає лише неперервний діапазон

Примітка: використавши Rows замість Row counter поверне значення останнього заповненого значення а не номер рядка! Для параметрів xlToRight та xlToLeft використовуються аналогічно Column та Columns


Find

дозволяє зробити пошук по осередках діапазону і повернути новий об'єкт Range, який представляє перший осередок, в якому було знайдено потрібне значення. У цього методу є безліч необов'язкових параметрів, які дозволяють визначити напрямок пошуку, чутливість до регістру, шукати все значення осередки або частина і т.п. Методи FindNext () і FindPrevious () дозволяють продовжити пошук, розпочатий методом Find (), в різних напрямках.

ПараметрОпис
WhatОбов'язковий параметр. Дані для пошуку. Може бути рядком або будь-який тип даних Microsoft Excel.
AfterОсередок, після якого ви хочете розпочати пошук.
LookInМоже бути однією з наступних констант xlFormulas, xlValues або xlNotes.
LookAtМоже бути одним з наступних констант xlWhole або xlPart.
SearchOrderМоже бути однією з наступних констант xlByRows або xlByColumns.
SearchDirectionМоже бути однією з наступних констант xlNext або xlPrevious.
MatchCaseTrue, щоб зробити пошук чутливий до регістру. Значення за замовчуванням дорівнює False.
MatchByteВикористовується тільки якщо ви вибрали або встановлена підтримка мови багатобайтових. True, щоб мати символи двобайтового збігаються тільки двобайтові символи. False - двобайтовим відповідають їх однобайтові еквіваленти.
SearchFormatФормат пошуку

Примітка: Усі параметри окрім SearchDirection приймають тип Variant

Sub Test()
    For i = 1 To 17
        If Not ThisWorkbook.Sheets(1).Range("A" & i).Find(What:="+", LookAt:=xlPart, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) Is Nothing Then
            ThisWorkbook.Sheets(1).Range("A" & i).Replace What:="+", Replacement:="-"
            Debug.Print ("В рядку №") & i & (" проведено заміну!")
        End If
    Next i
End Sub 

Даний код замінить всі "+" на знак "-" не залежно від їх розміщення в тексті і виведе рядок в якому було проведено заміну


Errors

властивість, яке через колекцію Errors дозволяє отримати доступ до об'єктів Error, які представляють виявлені помилки в діапазоні.

Sub Test()
    Set myRange = ThisWorkbook.Sheets(1).Range("A1")
    myRange.Formula = "'12"
    If myRange.Errors.Item(xlNumberAsText).Value = True Then
        MsgBox "В A1 текстове значення"
    Else
        MsgBox "В A1 не текстове значення"
    End If
End Sub 

Hidden

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

Sub Test()
    Rows(1).Hidden = True
    Columns(1).Hidden = True
End Sub 

Insert

дозволяє вставити комірки в діапазон, зсунувши інші.Приймає два параметри

Shift - обов'язковий параметр, який визначає напрямок зсуву вправо або вниз.

CopyOrigin - не обов'язковий, копіює форматування сусіднього поля та приймає значення xlFormatFromLeftOrAbove.

Sub Test()
    Rows(5).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns(5).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub 

Locked

це властивість дозволяє заблокувати осередки діапазону при захисті листа.

Sub Test()
    ThisWorkbook.Sheets(1).Range("A1:A10").Locked = False
End Sub 

Примітка: В Excel 2010 по замовчуванні даний параметр дорівнює True


Name

можливість отримати посилання на спеціальний об'єкт іменованого діапазону Name. Він дозволяє звертатися до діапазонів і формулами по іменах і дещо нагадує по функціональності об'єкт закладки в Word.

Sub Test()
    ThisWorkbook.Sheets(1).Range("A1:A10,B1,B5:B6,C1:C6,E1:E10,F8:F9,G7:G8,H8:H9,I1:I10").Name = "myRange"
    Range("myRange").Interior.Color = 15623696
End Sub 

Next

перейти на наступну комірку. Якщо лист не захищений, то наступного осередком буде вважатися осередок праворуч, якщо захищений - то наступна Незаблокована осередок.

Sub test()
    ThisWorkbook.Sheets(1).Range("A2").Next = 2 'в B2 буде проставлено 2'
End Sub 

Offset

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

ThisWorkbook.Sheets(1).Activate
ActiveCell.Offset(rowOffset:=3, columnOffset:=3).Activate

Parse

дозволяє розбити одну клітинку на кілька за вказаною вами шаблоном (наприклад, щоб відокремити код міста від номера телефону). Приймає два параметри:

ParseLine - містить ліві і праві дужки, щоб вказати, де клітини повинні бути розділені.

Destination - представляє верхній лівий кут діапазону призначення для проаналізованих даних. Якщо цей аргумент опущений, то Microsoft Excel розбирає починаючи з аналізованого діапазону.

Sub Test()
    ThisWorkbook.Sheets(1).Range("A1") = "'0939292929"
    ThisWorkbook.Sheets(1).Range("A2") = "'0939292000"
    ThisWorkbook.Sheets(1).Range("A3") = "'0939292222"
    ThisWorkbook.Sheets(1).Range("A1:A3").Parse ParseLine:="[xxx][xxxxxxxx]", Destination:=ThisWorkbook.Sheets(1).Range("B1")
End Sub 

PasteSpecial

операція, яка доповнює Copy і Cut. Вона дозволяє вставити те, що лежить в буфері обміну, із зазначенням спеціальних параметрів вставки (вставляти з додаванням до наявних даних, з множенням, відніманням, розподілом і т.п.)

ПараметрОпис
PasteЧастина діапазону для вставки даних. Може приймати наступні значення:
xlPasteAll(-4104) - Вставити все
xlPasteAllExceptBorders(7) - Все, крім полів, буде вставлено
xlPasteAllMergingConditionalFormats(14) - Все буде вставлено і умовні формати будуть об'єднані
xlPasteAllUsingSourceTheme(13) - Все, що буде передаватися з використанням теми джерела
xlPasteColumnWidths(8) - Вставити ширину колонки
xlPasteComments(-4144) - Вставити коментарі
xlPasteFormats(-4122) - Вставити скопійований вихідний формат
xlPasteFormulas(-4123) - Вставити формули
xlPasteFormulasAndNumberFormats(11) - Вставити формули і формат
xlPasteValidation(6) - Вставити перевірки
xlPasteValues(-4163) - Вставити значення
xlPasteValuesAndNumberFormats(12) - Вставити значення і формат
OperationОперація вставки. Може приймати наступні значення:
xlNone - не виконувати жодних операцій. Значення за замовчуванням
xlPasteSpecialOperationAdd(2) - скопійовані дані будуть додані до значення в осередку призначення
xlPasteSpecialOperationDivide(5) - скопійовані дані будуть розділені зі значенням в соті
xlPasteSpecialOperationMultiply(4) - Дані-копії будуть множитися на значення в комірці призначення
xlPasteSpecialOperationNone(-4142) - обчислення не буде зроблено в операції вставки
xlPasteSpecialOperationSubtract(3) - скопійовані дані будуть відніматися із значенням в соті
SkipBlanksTrue, щоб мати порожні клітинки в діапазоні в буфері обміну не вставлено в цільовий діапазон. Значення за замовчуванням дорівнює False
TransposeTrue, щоб транспонувати рядків і стовпців, за замовчуванням дорівнює False
Sub Test()
    ThisWorkbook.Sheets(1).Range("A1:B3").Copy
    ThisWorkbook.Sheets(1).Range("D2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub 

Range. Абсолютна та відносна адресація

Створюємо об'єкт типу Range, а на основі за допомогою властивості Range виробляємо відносну адресацію.

Sub Test ()
Dim HelloRange As Range
    Set HelloRange = ThisWorkbook.Sheets(1).Range("D3:D10")	'присвоюємо змінній HelloRange діапазон значень D3:D10 (який є абсолютною адресою)'
    HelloRange.Range("A1") = 3	'присвоюємо значення 3 першому елементу в абсолютному діапазоні (відносна адресація)'
End Sub 

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


Replace

метод, що доповнює метод Find (). Дозволяє проводити пошук і заміну значень в діапазоні.

Sub Test()
    ThisWorkbook.Sheets(1).Range("A1").Replace What:="+", Replacement:="-"
End Sub 

Select

дана властивість використовується при виділенні осередків

Sub Test ()
	ThisWorkbook.Sheets(1).Activate
	ThisWorkbook.Sheets(1).Range("D3:D10").Select
End Sub 

Примітка: при виділенні осередків на потрібному аркуші його потрібно спочатку активувати інакше виникне помилка при виконанні коду


Show

екран буде проскролено таким чином, щоб показати вказаний діапазон.


Sort

можливість провести сортування осередків в діапазоні. Можна використовувати велику кількість необов'язкових параметрів для налаштування сортування. SortSpecial () - з урахуванням особливостей азіатських мов.

ПараметрОпис
Key1Задає перше поле сортування, або як ім'я діапазону (String) або об'єкт Range. Визначає значення для сортування.
Order1Визначає порядок сортування для значень, зазначених в Key1.
Key2Друге поле сортування. Не може бути використане при сортуванні зведеної таблиці.
TypeЗазначено, які елементи повинні бути відсортовані.
Order2Визначає порядок сортування для значень, зазначених в Key2.
Key3Третє поле сортування. Не може бути використане при сортуванні зведеної таблиці.
Order3Визначає порядок сортування для значень, зазначених в Key3.
HeaderВизначає, чи містить перший рядок інформацію заголовка. xlNo значення за замовчуванням, вказати xlGuess, якщо ви хочете, щоб Excel спробував визначити заголовок.
OrderCustomЗадає ціле одне зміщення в списку призначених для користувача замовлень сортування.
MatchCaseВстановіть True, щоб виконати чутливе до регістру сортування, False виконати не-чутливе до регістру сортування. Не може бути використаний з зведеними таблицями.
OrientationВизначає чи сортування потрібно проводити в порядку зростання або зменшення.
SortMethodВизначає метод сортування.
DataOption1Вказує, як сортувати текст в діапазоні, зазначеному в Key1. Не застосовується для повороту сортування таблиці.
DataOption2Вказує, як сортувати текст в діапазоні, зазначеному в Key2. Не застосовується для повороту сортування таблиці.
DataOption3Вказує, як сортувати текст в діапазоні, зазначеному в Key3. Не застосовується для повороту сортування таблиці.
Sub Test()
    Set sheet1 = ThisWorkbook.Sheets(1)
    sheet1.Range("A1:B1") = "x"
    For i = 1 To 10
        sheet1.Range("A" & i + 1) = i
        sheet1.Range("B" & i + 1) = 10 - i
    Next i
    sheet1.Range("B1").Sort key1:=Range("B1"), order1:=xlAscending, Header:=xlYes
End Sub 

Value

найбільш часто використовується властивість об'єкта Range. Дозволяє отримати або призначити значення (числове, текстове або будь-яке інше) осередкам діапазону. Точно для тієї ж мети використовується властивість Value2, єдина відмінність - це властивість не підтримує типи даних Currency і Date.

Sub Test ()
	ThisWorkbook.Sheets(1).Range("A1:B2").Value = 2
	'або'
	x = ThisWorkbook.Sheets(1).Range("A1:B2").Value
End Sub 

view553like0dislike0 avatard_l4w clock 2016-07-20 03:34

Коментарі:



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

Про нас

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

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

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

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

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

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

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

Сайт

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

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


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

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

www.000webhost.com