Π Π°Π·Π½ΠΎΠ΅

Vba excel Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив: VBA Excel. ΠœΠ°ΡΡΠΈΠ²Ρ‹ (ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅, динамичСскиС)

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ИспользованиС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² VBA Π½Π° ΡƒΡ€ΠΎΠΊΠ°Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΈ

ο»Ώ

VBA β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык программирования. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ прилоТСния Π½Π° Visual Basic, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти языки β€” Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ родствСнники. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΈ Π»Π΅Π³ΠΊΠΎ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΠ± установкС ΠΈ настройкС срСды программирования ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½ΡƒΠΆΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ β€” MS Office Π΅ΡΡ‚ΡŒ практичСски Π½Π° любом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с использованиСм Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов.

Удобство срСды VBA Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π²Π½Π΅Π΄Ρ€Π΅Π½Π° Π² ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Microsoft Office ΠΈ, соотвСтствСнно, являСтся доступной практичСски Π½Π° любом ПК, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ установки Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

НСмногиС учитСля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ возмоТности Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ офисного программирования. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ языка VBA ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ ΠΊ использованию, Π² Ρ‚ΠΎΠΌ числС Π½Π° ΡƒΡ€ΠΎΠΊΠ°Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΈ.

Массив β€” Π½Π°Π±ΠΎΡ€ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ доступных Ρ‡Π΅Ρ€Π΅Π· это имя ΠΈ порядковый Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π½Π°Π±ΠΎΡ€Π΅. ΠžΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅ΠΌ Π² элСктронных Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Excel Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив А, состоящий ΠΈΠ· 20 Ρ… 10 = 200 элСмСнтов. Для этого Π² Excel создадим ΠΏΠΎΠ»Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ элСмСнты массива Ρ†Π΅Π»Ρ‹ΠΌΠΈ случайными числами ΠΎΡ‚ 1 Π΄ΠΎ 100.

Рис. 1. ПолС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² Excel

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ β†’ Visual Basic. Π—Π°Ρ‚Π΅ΠΌ Π²ΠΊΠ»Π°Π΄ΠΊΠ° Insert β†’ Module. ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ ΠΎΠΊΠ½ΠΎ для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Рис. 2. Окно для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

Sub Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ_Массив()

Dim A(20, 10) As Integer

For i = 1 To 20 ‘Число строк Π² массивС

For j = 1 To 10 ‘Число столбцов Π² массивС

A(i, j) = Int(Rnd * 100 + 1) ‘Π—Π°Π΄Π°Π½ΠΈΠ΅ массива Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами ΠΎΡ‚ 1 Π΄ΠΎ 100

Cells(i, j) = A(i, j)

Next j

Next i

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ листС Excel образуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅:

Рис. 3. Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² Excel

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для нахоТдСния максимального, минимального, срСднСго значСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, вычислим сумму ΠΈ Ρ€Π°Π·ΠΌΠ°Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ВсС пСрСчислСнныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅, ΠΊΡ€ΠΎΠΌΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ срСднСго значСния. ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…: Dim Max, Min, Π‘ΡƒΠΌΠΌΠ°, Π Π°Π·ΠΌΠ°Ρ… As Integer, Π‘Ρ€Π΅Π΄Π½Π΅Π΅ As Single.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ матСматичСской ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ, Π½Π°ΠΉΠ΄Ρ‘ΠΌ наибольшСС ΠΈ наимСньшСС значСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹: If A(i, j) >Max Then Max = A(i, j)

If A(i, j)

Для вычислСния суммы: Π‘ΡƒΠΌΠΌΠ° = Π‘ΡƒΠΌΠΌΠ° + A(i, j), срСднСго значСния: Π‘Ρ€Π΅Π΄Π½Π΅Π΅ = Π‘ΡƒΠΌΠΌΠ° / 200, Ρ€Π°Π·ΠΌΠ°Ρ…Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹: Π Π°Π·ΠΌΠ°Ρ… = Max β€” Min. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

Sub Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ_Массив()

Dim A(20, 10) As Integer

Dim Max, Min, Π‘ΡƒΠΌΠΌΠ°, Π Π°Π·ΠΌΠ°Ρ… As Integer, Π‘Ρ€Π΅Π΄Π½Π΅Π΅ As Single

Max = 0 ‘ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Максимального элСмСнта Π² массивС

Min = 100 ‘ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Минимального элСмСнта Π² массивС

Π‘ΡƒΠΌΠΌΠ° = 0

For i = 1 To 20 ‘Число строк Π² массивС

For j = 1 To 10 ‘Число столбцов Π² массивС

A(i, j) = Int(Rnd * 100 + 1) ‘Π—Π°Π΄Π°Π½ΠΈΠ΅ массива Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами ΠΎΡ‚ 1 Π΄ΠΎ 100

Cells(i, j) = A(i, j)

If A(i, j) >= Max Then Max = A(i, j) ‘ВычислСниС Максимального элСмСнта Π² массивС

If A(i, j)

Π‘ΡƒΠΌΠΌΠ° = Π‘ΡƒΠΌΠΌΠ° + A(i, j) ‘ВычислСниС Π‘ΡƒΠΌΠΌΡ‹

Next j

Next i

Π‘Ρ€Π΅Π΄Π½Π΅Π΅ = Π‘ΡƒΠΌΠΌΠ° / 200 ‘ВычислСниС Π‘Ρ€Π΅Π΄Π½Π΅Π³ΠΎ значСния

Π Π°Π·ΠΌΠ°Ρ… = Max β€” Min

Range(Β«A22″).Value = Β«Max =»

Range(Β«A23″).Value = Β«Min =»

Range(Β«A24″).Value = Β«Π‘ΡƒΠΌΠΌΠ° =»

Range(Β«A25″).Value = Β«Π‘Ρ€Π΅Π΄Π½Π΅Π΅ =»

Range(Β«A26″).Value = Β«Π Π°Π·ΠΌΠ°Ρ… =»

Range(Β«B22″).Value = Max

Range(Β«B23″).Value = Min

Range(Β«B24″).Value = Π‘ΡƒΠΌΠΌΠ°

Range(Β«B25″).Value = Π‘Ρ€Π΅Π΄Π½Π΅Π΅

Range(Β«B26″).Value = Π Π°Π·ΠΌΠ°Ρ…

End Sub

Для создания ΠΊΠΎΠΏΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, сдвинСм Π΅Ρ‘ Π½Π° 11 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π²ΠΏΡ€Π°Π²ΠΎ.

‘Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

For i = 1 To 20

For j = 1 To 10

Cells(i, j + 11) = A(i, j)

Next j

Next i

Наглядно Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ копия Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Рис. 4. Копия Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Π‘ этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π—Π°ΠΌΠ΅Π½ΠΈΠΌ всС числа ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 2 Π½Π° 2, ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 3 Π½Π° 3, ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 5 Π½Π° 5, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π½Π° Β«*Β». ΠŸΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘ΠΌ подсчёт Ρ‚Π°ΠΊΠΈΡ… чисСл. Для этого Π΄ΠΎΠ±Π°Π²ΠΈΠΌ строки:

‘ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Dim ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅2, ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅3, ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅5, Π—Π²Π΅Π·Π΄ As Integer

ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅2 = 0

ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅3 = 0

ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅5 = 0

Π—Π²Π΅Π·Π΄ = 0

For i = 1 To 20

For j = 1 To 10

If A(i, j) \ 2 = A(i, j) / 2 Then Cells(i, j + 22) = 2

If A(i, j) \ 3 = A(i, j) / 3 Then Cells(i, j + 22) = 3

If A(i, j) \ 5 = A(i, j) / 5 Then Cells(i, j + 22) = 5

If A(i, j) \ 2 A(i, j) / 2 And A(i, j) \ 3 A(i, j) / 3 And A(i, j) \ 5 A(i, j) / 25 Then Cells(i, j + 22) = «*»

If A(i, j) \ 2 = A(i, j) / 2 Then ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅2 = ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅2 + 1 ‘ΠŸΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ количСства чисСл ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… 2

If A(i, j) \ 3 = A(i, j) / 3 Then ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅3 = ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅3 + 1 ‘ΠŸΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ количСства чисСл ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… 3

If A(i, j) \ 5 = A(i, j) / 5 Then ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅5 = ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅5 + 1 ‘ΠŸΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ количСства чисСл ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… 5

If Cells(i, j + 22) = «*» Then Π—Π²Π΅Π·Π΄ = Π—Π²Π΅Π·Π΄ + 1 ‘ΠŸΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ количСства «*»

Next j

Next i

Range(Β«D22″).Value = Β«Π’Π°Π±Π»ΠΈΡ†Π°Β»

Range(Β«O22″).Value = «Копия Π’Π°Π±Π»ΠΈΡ†Ρ‹Β»

Range(Β«Z22″).Value = Β«ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°Β»

Range(Β«W22″).Value = Β«ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅ 2″ ‘Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²

Range(Β«W23″).Value = Β«ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅ 3″

Range(Β«W24″).Value = Β«ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅ 5″

Range(Β«W25″).Value = «Кол-Π²ΠΎ *»

Range(Β«X22″).Value = ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅2

Range(Β«X23″).Value = ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅3

Range(Β«X24″).Value = ΠšΡ€Π°Ρ‚Π½Ρ‹Π΅5

Range(Β«X25″).Value = Π—Π²Π΅Π·Π΄

Рис. 5. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ офисноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρƒ студСнтов комплСкс Π·Π½Π°Π½ΠΈΠΉ, ΡƒΠΌΠ΅Π½ΠΈΠΉ ΠΈ Π½Π°Π²Ρ‹ΠΊΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π² области Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с офисным ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Microsoft Office.

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°:

  1. И. Π“. Π€Ρ€ΠΈΠ·Π΅Π½. ΠžΡ„ΠΈΡΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС / М. Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎ-торговая корпорация Β«Π”Π°ΡˆΠΊΠΎΠ² ΠΈ К», 2013 Π³.
  2. Π―Π·Ρ‹ΠΊΠΈ управлСния прилоТСниями: Π£Ρ‡Π΅Π±Π½ΠΎ-мСтодичСскоС пособиС. β€” М.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΡ‚Π΄Π΅Π» Ρ„Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚Π° Π’ΠœΠΈΠš ΠœΠ“Π£ ΠΈΠΌΠ΅Π½ΠΈ М. Π’. Ломоносова β„– 05899; 2015 Π³.
  3. https://studfiles.net/preview/2897110/
  4. https://www.intuit.ru/studies/courses/23/23/info

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ (Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ автоматичСски): VBA, массив, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Π—Π°Π΄Π°Π½ΠΈΠ΅ массива, ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт, ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ€Π°Π·ΠΌΠ°Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Число столбцов, Число строк.

Быстрый поиск Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ 2 способа быстрого поиска Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивах.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строках ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива,

ΠΎΠ±Π° способа ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.

Бпособы формирования ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… массивов — Ρ€Π°Π·Π½Ρ‹Π΅:

ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ArrAutofilterEx

Π²Ρ‚ΠΎΡ€ΠΎΠΉ способ — Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽΒ ArraySearchResults

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ отличия ΠΈ особСнности этих 2 способов поиска:

  • ArrAutofilterEx позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ нСсколько ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² поиска (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ)
  • ArrAutofilterEx ΠΈΡ‰Π΅Ρ‚ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ искомого тСкста Π² значСния Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… столбцов (Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ совпадСниС)
  • ArrAutofilterEx ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Π·Π°Π½ΠΎΠ²ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ всС элСмСнты массива,
    соотвСтствСнно, ΠΏΡ€ΠΈ поискС 10 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π° увСличиваСтся Π² 10 Ρ€Π°Π·
  • ArraySearchResults позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ массива Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ столбцу
  • ArraySearchResultsΒ ΠΈΡ‰Π΅Ρ‚ совпадСниС искомого тСкста со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ столбца (Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ совпадСниС)
  • ArraySearchResults ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ поиск Π² Π·Π°Ρ€Π°Π½Π΅Π΅ сформированной тСкстовой строкС
    Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ всС ячСйки массива Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈ поиск 100 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массивС Π·Π°ΠΉΠΌΡ‘Ρ‚ Π½Π΅Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ поиск 1 значСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ поиска Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… массивах:

Поиск с использованиСм ArrAutofilterEx

Sub ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠœΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎΠŸΠΎΠΈΡΠΊΠ°Π’ΠœΠ°ΡΡΠΈΠ²Π΅()
    t = Timer
    Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅$ = 560
    Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†Π”Π»ΡΠŸΠΎΠΈΡΠΊΠ°& = 3
Β 
    ' Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ массив с листа
    arr = [a1:d30000].Value
Β 
    ' ΡƒΠΊΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ массив Arr, оставляя лишь Ρ‚Π΅ строки,
    ' Π³Π΄Π΅ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ столбцС Π΅ΡΡ‚ΡŒ искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    On Error Resume Next: Err.Clear
    resArr = ArrAutofilterEx(arr, Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†Π”Π»ΡΠŸΠΎΠΈΡΠΊΠ°& & "=" & Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅$)
Β 
    ' провСряСм Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² поиска
    If Err Then Debug.Print "Π’Π°ΠΊΠΈΠ΅ строки Π² массивС Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹": Exit Sub
Β 
    ' Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… строк значСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ столбца
    For i = LBound(resArr) To UBound(resArr)
        Debug.Print "Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ - строка " & i & " ΠΈΠ· " & UBound(resArr) & ": ", resArr(i, 1)
    Next i
    Debug.Print "ВрСмя: " & Timer - t & " сСк."
End Sub

Поиск с использованиСм ArraySearchResults

Sub ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π‘Ρ‹ΡΡ‚Ρ€ΠΎΠ³ΠΎΠŸΠΎΠΈΡΠΊΠ°Π’ΠœΠ°ΡΡΠΈΠ²Π΅()
    t = Timer
    Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅$ = 560
    Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†Π”Π»ΡΠŸΠΎΠΈΡΠΊΠ°& = 3
Β 
    ' Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ массив с листа
    arr = [a1:d30000].Value
Β 
    ' Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ строку поиска
    ss$ = SearchString(arr, Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†Π”Π»ΡΠŸΠΎΠΈΡΠΊΠ°&)
Β 
    ' ΡƒΠΊΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ массив Arr, оставляя лишь Ρ‚Π΅ строки,
    ' Π³Π΄Π΅ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ столбцС Π΅ΡΡ‚ΡŒ искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    resArr = ArraySearchResults(arr, ss$, Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅$)
Β 
    ' провСряСм Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² поиска
    If Not IsArray(resArr) Then Debug.Print "Π’Π°ΠΊΠΈΠ΅ строки Π² массивС Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹": Exit Sub
Β 
    ' Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… строк значСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ столбца
    For i = LBound(resArr) To UBound(resArr)
        Debug.Print "Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ - строка " & i & " ΠΈΠ· " & UBound(resArr) & ": ", resArr(i, 1)
    Next i
    Debug.Print "ВрСмя: " & Timer - t & " сСк."
End Sub

Код Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ArraySearchResults:

Function ArraySearchResults(ByRef arr, ByRef searchStr As String, ByVal txt As String, _
                            Optional ByVal Sep As String = "%$%") As Variant
    ' функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² массив Arr,
    ' ΠΈ Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку SearchString ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ячССк Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ столбца массива
    ' По этой строкС SearchString функция ΠΈΡ‰Π΅Ρ‚ строки массива, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ встрСчаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ txt,
    ' ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ усСчённый массив, содСрТащий Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подходящиС строки
    ' Поиск вСдётся ΠΏΠΎ ВОЧНОМУ совпадСнию Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

    ro& = 0: spl = Split(searchStr, Sep & txt & Sep)
    If UBound(spl) = 0 Then Exit Function    ' Π½Π΅Ρ‚ Π² массивС Π½ΡƒΠΆΠ½Ρ‹Ρ… строк
    ' ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска, вычисляя Π½ΠΎΠΌΠ΅Ρ€Π° строк Π² исходном массивС
    For i = LBound(spl) To UBound(spl) - 1
        txt = spl(i): ro& = ro& + 1 + (Len(spl(i)) - Len(Replace(spl(i), Sep, ""))) / Len(Sep) \ 2
        spl(i) = ro&
    Next i
    ' ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ массив для Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²:
    ' ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅ - ΠΊΠ°ΠΊ исходный, ΠΏΠΎ высотС - содСрТащий ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ строк, сколько Π½Π°ΠΉΠ΄Π΅Π½ΠΎ совпадСний
    ReDim resArr(1 To UBound(spl), LBound(arr, 2) To UBound(arr, 2))
    ' заполняСм Π½ΠΎΠ²Ρ‹ΠΉ массив
    For i = LBound(spl) To UBound(spl) - 1
        For j = LBound(arr, 2) To UBound(arr, 2)
            resArr(i + 1, j) = arr(spl(i), j)
        Next j
    Next i
    ArraySearchResults = resArr
End Function
Β 
Function SearchString(ByRef arr, ByVal ArrayColumn As Long, _
                      Optional ByVal Sep As String = "%$%") As String
    ' ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ всС значСния ΠΈΠ· столбца ArrayColumn массива Arr Π² ΠΎΠ΄Π½Ρƒ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку,
    ' Π² качСствС раздСлитСля элСмСнтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ строку Sep
    ' Для ускорСния ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… строк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ
    ' ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ buffer$ ΠΈ buffer2$
    buffer$ = "": buffer2$ = "": Sep2$ = Sep$ & Sep$: Const BufferLen& = 6000
    On Error Resume Next: Err.Clear: SearchString = Sep2$
    If ArrayColumn > UBound(arr, 2) Or ArrayColumn < LBound(arr, 2) Then Exit Function
    For i = LBound(arr) To UBound(arr)
        buffer$ = buffer$ & Trim$(arr(i, ArrayColumn)) & Sep2$
        If Len(buffer$) > BufferLen& Then
            buffer2$ = buffer2$ & buffer$: buffer$ = ""
            If Len(buffer2$) > BufferLen& * 20 Then _
               SearchString = SearchString & buffer2$: buffer2$ = ""
        End If
    Next i
    SearchString = SearchString & buffer2$ & buffer$
End Function

ΠŸΡ€ΠΈ поискС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ±ΠΎΠΈΡ… макросов поиска Π½Π΅ сильно отличаСтся — Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ функция ArraySearchResults оказываСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС.

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° столбцов Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС

Ѐункция ArraySwapColumns позволяСт ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ порядкС столбцы Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.
ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массива (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ лишниС столбцы, ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅)

Π‘ΠΌ. ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π² ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅.

Function ArraySwapColumns(ByVal arr As Variant, ByVal NewColumnsOrder$, _
                          Optional ByVal OptionBase As Integer = 1) As Variant
    ' функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив arr
    ' (для пСрСстановки столбцов)
    ' ΠΈ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку NewColumnsOrder с Π½ΠΎΠ²Ρ‹ΠΌ порядком столбцов
    ' Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ",,5,6,8,,9-15,18,2,9-11,,1,4,,21,"
    On Error Resume Next
    ColumnsArray = ParseColumnsString(NewColumnsOrder$)
    NewUBound% = UBound(ColumnsArray) + 1
Β 
    ReDim tmpArr(LBound(arr, 1) To UBound(arr, 1), LBound(arr, 2) To NewUBound%)
Β 
    For j = LBound(ColumnsArray) To UBound(ColumnsArray)
        OldColumn% = ColumnsArray(j) + 1 - OptionBase
        NewColumn% = j + LBound(arr, 2)
        If OldColumn% >= 0 Then
            For i = LBound(arr, 1) To UBound(arr, 1)    ' пСрСнос столбца
                tmpArr(i, NewColumn%) = arr(i, OldColumn%)
            Next i
        End If
    Next j
    ArraySwapColumns = tmpArr
End Function
Β 
Β 
Function ParseColumnsString(ByVal txt$) As Variant
    ' ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° строку Ρ‚ΠΈΠΏΠ° ",,5,6,8,,9-15,18,2,11-9,,1,4,,21,"
    ' Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ (Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ) массив Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅
    ' array(-1,-1,5,6,8,-1,9,10,11,12,13,14,15,18,2,11,10,9,-1,1,4,-1,21,-1)
    ' (пустыС значСния Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° -1; Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Ρ‚ΠΈΠΏΠ° 9-15 ΠΈ 17-13 Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ)
    arr = Split(Replace(txt$, " ", ""), ","): Dim n As Long: ReDim tmpArr(0 To 0)
    For i = LBound(arr) To UBound(arr)
        Select Case True
            Case arr(i) = "", Val(arr(i)) < 0
                tmpArr(UBound(tmpArr)) = -1: ReDim Preserve tmpArr(0 To UBound(tmpArr) + 1)
            Case IsNumeric(arr(i))
                tmpArr(UBound(tmpArr)) = arr(i): ReDim Preserve tmpArr(0 To UBound(tmpArr) + 1)
            Case arr(i) Like "*#-#*"
                spl = Split(arr(i), "-")
                If UBound(spl) = 1 Then
                    If IsNumeric(spl(0)) And IsNumeric(spl(1)) Then
                        For j = Val(spl(0)) To Val(spl(1)) Step IIf(Val(spl(0)) > Val(spl(1)), -1, 1)
                            tmpArr(UBound(tmpArr)) = j: ReDim Preserve tmpArr(0 To UBound(tmpArr) + 1)
                        Next j
                    End If
                End If
        End Select
    Next i
    On Error Resume Next: ReDim Preserve tmpArr(0 To UBound(tmpArr) - 1)
    ParseColumnsString = tmpArr
End Function

——————— Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ ———————-
Π’ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Function SWAP(ByVal arr As Variant, ByVal NewColumnsOrder$) As Variant
    ' Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив arr (для пСрСстановки столбцов)
    ' ΠΈ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку NewColumnsOrder с Π½ΠΎΠ²Ρ‹ΠΌ порядком столбцов Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ",,5,6,8,,9-15,18,2,9-11,,1,4,,21,"
    ' Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ столбцы пСрСставлСны Π² Π½ΡƒΠΆΠ½ΠΎΠΌ порядкС
    On Error Resume Next
    cols = Split(Replace(NewColumnsOrder$, " ", ""), ","): Dim n As Long: ReDim colArr(0 To 0)
    For i = LBound(cols) To UBound(cols)
        Select Case True
            Case cols(i) = "", Val(cols(i)) < 0
                colArr(UBound(colArr)) = -1: ReDim Preserve colArr(0 To UBound(colArr) + 1)
            Case IsNumeric(cols(i))
                colArr(UBound(colArr)) = cols(i): ReDim Preserve colArr(0 To UBound(colArr) + 1)
            Case cols(i) Like "*#-#*"
                spl = Split(cols(i), "-")
                If UBound(spl) = 1 Then
                    If IsNumeric(spl(0)) And IsNumeric(spl(1)) Then
                        For j = Val(spl(0)) To Val(spl(1)) Step IIf(Val(spl(0)) > Val(spl(1)), -1, 1)
                            colArr(UBound(colArr)) = j: ReDim Preserve colArr(0 To UBound(colArr) + 1)
                        Next j
                    End If
                End If
        End Select
    Next i
    ReDim Preserve colArr(0 To UBound(colArr) - 1)
    ColumnsArray = colArr
Β 
    ReDim tmpArr(LBound(arr, 1) To UBound(arr, 1), LBound(arr, 2) To UBound(ColumnsArray) + 1)
    For j = LBound(ColumnsArray) To UBound(ColumnsArray)
        If Val(ColumnsArray(j)) >= 0 Then
            For i = LBound(arr, 1) To UBound(arr, 1): tmpArr(i, j + LBound(arr, 2)) = arr(i, Val(ColumnsArray(j))): Next i
        End If
    Next j
    SWAP = tmpArr
End Function

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования (для ΠΏΠ΅Ρ€eстановки столбцов Π½Π° листС Excel)

Range("k1:o30").Value = SWAP(Range("a1:h40").Value, "2,5,1,,8")
  • 15613 просмотров

НС получаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ макрос? НС удаётся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ свои Π½ΡƒΠΆΠ΄Ρ‹?

ΠžΡ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ Π·Π°ΠΊΠ°Π· Ρƒ нас Π½Π° сайтС, Π½Π΅ Π·Π°Π±Ρ‹Π² ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ОбъСдинСниС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов | ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Excel

Ѐункция CombineArrays ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ 2 Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массива ΠžΠ”Π˜ΠΠΠšΠžΠ’ΠžΠ™ ШИРИНЫ Π² ΠΎΠ΄ΠΈΠ½ массив

(Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив «Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ΡΡ» Π½ΠΈΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, ΠΏΡƒΡ‚Π΅ΠΌ добавлСния строк ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ массива Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ)

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Ρ‚ΠΎΠΉ ΠΆΠ΅ ΡˆΠΈΡ€ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ исходныС,Β Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ массива Ρ€Π°Π²Π½Π° суммС количСства строк исходных массивов.

Β 

Π’ случаС, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· массивов Π½Π΅ Π·Π°Π΄Π°Π½, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ массив (Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ)

Π’ΠΠ˜ΠœΠΠΠ˜Π•: всС размСрности массивов 1 ΠΈ 2 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ (ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ размСрности — ΠΏΠΎ высотС)

ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ индСксы массивов Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 1 (Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Option Base 1)

Sub ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠœΠ°ΡΡΠΈΠ²ΠΎΠ²()
    Arr1 = [a5:c10].Value    ' массив Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 6 * 3
    Arr2 = [a24:c26].Value    ' массив Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 3 * 3
    Arr3 = [a55:c62].Value    ' массив Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 8 * 3

    ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²12 = CombineArrays(Arr1, Arr2)
    Debug.Print "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк послС объСдинСния массивов 1 ΠΈ 2:   " & _
                UBound(ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²12) ' Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: 9 (6+3)

Β 
    ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²123 = CombineArrays(Arr1, CombineArrays(Arr2, Arr3))
    Debug.Print "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк послС объСдинСния массивов 1, 2 ΠΈ 3:   " & _
                UBound(ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²123) ' Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: 17 (6+3+8)

End Sub
Function CombineArrays(Arr1 As Variant, Arr2 As Variant) As Variant
    'функция CombineArrays ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ 2 Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массива ΠžΠ”Π˜ΠΠΠšΠžΠ’ΠžΠ™ ШИРИНЫ Π² ΠΎΠ΄ΠΈΠ½ массив
    '(Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив "дописываСтся" Π½ΠΈΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, ΠΏΡƒΡ‚Π΅ΠΌ добавлСния строк ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ массива Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ)
    'Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Ρ‚ΠΎΠΉ ΠΆΠ΅ ΡˆΠΈΡ€ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ исходныС,
    'Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ массива Ρ€Π°Π²Π½Π° суммС количСства строк исходных массивов
    '
    'Π’ случаС, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· массивов Π½Π΅ Π·Π°Π΄Π°Π½, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ массив (Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ)
    'Π’ΠΠ˜ΠœΠΠΠ˜Π•: всС размСрности массивов 1 ΠΈ 2 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ (ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ размСрности - ΠΏΠΎ высотС)
    'ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ индСксы массивов Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 1 (Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Option Base 1)

Β 
    ' Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ являСтся массивом, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (массив)
    If (Not IsArray(Arr1)) And IsArray(Arr2) Then CombineArrays = Arr2: Exit Function
    If (Not IsArray(Arr2)) And IsArray(Arr1) Then CombineArrays = Arr1: Exit Function
    ' Ссли ΠΎΠ±Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивами
    If (Not IsArray(Arr2)) And (Not IsArray(Arr1)) Then
        Debug.Print "ΠžΠ¨Π˜Π‘ΠšΠ: Оба ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… значСния Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивами!"
        CombineArrays = Null: Exit Function
    End If
Β 
    ' провСряСм совпадСниС размСрностСй массивов Arr1 ΠΈ Arr2
    On Error Resume Next: Err.Clear
Β 
    If (LBound(Arr1, 2) <> LBound(Arr2, 2)) Or (UBound(Arr1, 2) <> UBound(Arr2, 2)) Then
        Debug.Print "ΠžΠ¨Π˜Π‘ΠšΠ: РазмСрности массивов (ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅) Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚"
        CombineArrays = Null: Exit Function
    End If
    If Err.Number = 9 Then
        Debug.Print "ΠžΠ¨Π˜Π‘ΠšΠ: Один ΠΈΠ· массивов Π½Π΅ являСтся Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ!"
        CombineArrays = Null: Exit Function
    End If
Β 
Β 
    ReDim arr(1 To UBound(Arr1, 1) + UBound(Arr2, 1), LBound(Arr1, 2) To UBound(Arr1, 2))
Β 
    For i = 1 To UBound(Arr1, 1)
        For j = LBound(Arr1, 2) To UBound(Arr1, 2)
            arr(i, j) = Arr1(i, j)
        Next
    Next
Β 
    For i = 1 To UBound(Arr2, 1)
        For j = LBound(Arr2, 2) To UBound(Arr2, 2)
            arr(i + UBound(Arr1, 1), j) = Arr2(i, j)
        Next
    Next
    CombineArrays = arr    ' Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹ΠΉ массив
End Function

Поиск подходящих строк Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС

Данная функция ΠΈΡ‰Π΅Ρ‚ Π² массивС всС строки, похдодящиС ΠΏΠΎΠ΄ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² подходящих строк (Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ)

Option Compare Text
Β 
Function ArrAutofilter(ByRef arr, ParamArray args() As Variant) As String
    ' ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΎ ссылкС массив ARR для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
    ' ΠΈ список ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ "3=Π½Π΅ΠΊΠΈΠΉ тСкст" (Π½ΠΎΠΌΠ΅Ρ€ столбца, "=", искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)
    ' Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ строку - список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² подходящих строк (Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ)
    Dim Index As Long, OK As Boolean, ComparedColumn As Long, res As String
Β 
    If Not IsArray(arr) Then MsgBox "Π­Ρ‚ΠΎ Π½Π΅ массив!", vbCritical, _
       "Ошибка Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ArrAutofilter": Exit Function
Β 
    For Index = LBound(args) To UBound(args)    ' ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
        If Not IsMissing(args(Index)) Then
            If GetAutofilterArgument(args(Index), ComparedColumn, res) Then
                If (ComparedColumn > UBound(arr, 2)) Or (ComparedColumn < LBound(arr, 2)) Then _
                   ArrAutofilter = ArrAutofilter & "Π’ массивС Π½Π΅Ρ‚ столбца с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ " & _
                   ComparedColumn & vbNewLine
            Else
                ArrAutofilter = ArrAutofilter & "НСвСрно сформирована строка Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ: " & _
                                args(Index) & vbNewLine
            End If
        Else
            ArrAutofilter = ArrAutofilter & (Index + 1) & "-ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ отсутствуСт" & _
                            vbNewLine
        End If
    Next Index
    If Len(ArrAutofilter) Then
        MsgBox ArrAutofilter, vbCritical, "Ошибка Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ArrAutofilter"
        ArrAutofilter = "": Exit Function
    End If
Β 
    For i = LBound(arr, 1) To UBound(arr, 1)    ' ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС строки массива
        OK = True
        For Index = LBound(args) To UBound(args)    ' ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
            ' ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
            X = GetAutofilterArgument(args(Index), ComparedColumn, res)
            If Not (arr(i, ComparedColumn) Like res) Then OK = False: Exit For
        Next Index
        If OK Then ArrAutofilter = ArrAutofilter & "," & i
    Next i
    ArrAutofilter = Mid$(ArrAutofilter, 2)
End Function
Β 
Function GetAutofilterArgument(ByVal arg, ByRef col As Long, ByRef searchStr As String) As Boolean
    col = 0: searchStr = ""
    If UBound(Split(arg, "=")) < 1 Then Exit Function    ' Π½Π΅Ρ‚ Π·Π½Π°ΠΊΠ° =
    sCol = Split(arg, "=")(0): If Len(sCol) = 0 Or Not sCol Like String(Len(sCol), "#") Then _
                                  Exit Function  ' Π½ΠΎΠΌΠ΅Ρ€ столбца Π½Π΅ соотвСтствуСт
    searchStr = Mid$(arg, Len(sCol) + 2): col = Val(sCol)
    If col > 0 Then GetAutofilterArgument = True
End Function
Β 
Sub ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ()
    arr = shs.UsedRange.Value
    Debug.Print ArrAutofilter(arr, "2=Для ΠΌΡƒΠΆΡ‡ΠΈΠ½", "4=ДТинсы", "73=?*")
End Sub

НСсколько измСнённая функция — Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ массива:

Function ArrAutofilterEx(ByRef arr, ParamArray args() As Variant) As Variant
    ' ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΎ ссылкС массив ARR для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
    ' ΠΈ список ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ "3=Π½Π΅ΠΊΠΈΠΉ тСкст" (Π½ΠΎΠΌΠ΅Ρ€ столбца, "=", искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)
    ' Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив с подходящими строками
    Dim Index As Long, OK As Boolean, ComparedColumn As Long, res As String
Β 
    If Not IsArray(arr) Then MsgBox "Π­Ρ‚ΠΎ Π½Π΅ массив!", vbCritical, _
       "Ошибка Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ArrAutofilter": Exit Function
Β 
    For Index = LBound(args) To UBound(args)    ' ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
        If Not IsMissing(args(Index)) Then
            If GetAutofilterArgument(args(Index), ComparedColumn, res) Then
                If (ComparedColumn > UBound(arr, 2)) Or (ComparedColumn < LBound(arr, 2)) Then _
                   ArrAutofilter = ArrAutofilter & "Π’ массивС Π½Π΅Ρ‚ столбца с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ " & _
                   ComparedColumn & vbNewLine
            Else
                ArrAutofilter = ArrAutofilter & "НСвСрно сформирована строка Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ: " & _
                                args(Index) & vbNewLine
            End If
        Else
            ArrAutofilter = ArrAutofilter & (Index + 1) & "-ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ отсутствуСт" & _
                            vbNewLine
        End If
    Next Index
    If Len(ArrAutofilter) Then
        MsgBox ArrAutofilter, vbCritical, "Ошибка Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ArrAutofilter"
        ArrAutofilterEx = "": Exit Function
    End If
Β 
    Dim coll As New Collection
    For i = LBound(arr, 1) To UBound(arr, 1)    ' ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС строки массива
        OK = True
        For Index = LBound(args) To UBound(args)    ' ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
            ' ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
            X = GetAutofilterArgument(args(Index), ComparedColumn, res)
            If Not (arr(i, ComparedColumn) Like res) Then OK = False: Exit For
        Next Index
        If OK Then coll.Add i
    Next i
Β 
    ' Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ массив
    ReDim newarr(1 To coll.Count, LBound(arr, 2) To UBound(arr, 2))
    For i = 1 To coll.Count
        ro = coll(i)
        For j = LBound(arr, 2) To UBound(arr, 2): newarr(i, j) = arr(ro, j): Next j
    Next i
Β 
    ArrAutofilterEx = newarr
End Function
Β 
Function GetAutofilterArgument(ByVal arg, ByRef col As Long, ByRef searchStr As String) As Boolean
    col = 0: searchStr = ""
    If UBound(Split(arg, "=")) < 1 Then Exit Function    ' Π½Π΅Ρ‚ Π·Π½Π°ΠΊΠ° =
    sCol = Split(arg, "=")(0): If Len(sCol) = 0 Or Not sCol Like String(Len(sCol), "#") Then _
                                  Exit Function  ' Π½ΠΎΠΌΠ΅Ρ€ столбца Π½Π΅ соотвСтствуСт
    searchStr = Mid$(arg, Len(sCol) + 2): col = Val(sCol)
    If col > 0 Then GetAutofilterArgument = True
End Function

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

Sub FilterExample()
    On Error Resume Next
    Dim arr As Variant
Β 
    ' ΠΎΡ‚Π±ΠΈΡ€Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Π΅ строки ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° a2:t200,
    ' Π³Π΄Π΅ тСкст Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ столбцС начинаСтся с "asy"
    arr = ArrAutofilterEx(Range("a2:t200").Value, "3=asy*")
Β 
    ' создаСм лист, вставляСм Π½Π° Π½Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
    Worksheets.Add.Range("a1").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Excel VBA — ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² нашСм послСднСм ΡƒΡ€ΠΎΠΊΠ΅ Π±Ρ‹Π»ΠΈ
всС ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. Он ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ столбСц
ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ². Но Ρƒ вас ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ массивы с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ. ВСорСтичСски Π²Ρ‹
ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ массив Π΄ΠΎ 60 ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π² Excel VBA. Однако Π²Ρ‹
Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ€Π°Π΄Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это рСдкая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π΅Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ,
ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ 2 измСрСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ, Π²Ρ‹ просто добавляСтС Π·Π°ΠΏΡΡ‚ΡƒΡŽ послС
ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ скобками ΠΈΠΌΠ΅Π½ΠΈ вашСго массива, Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½
количСство.Как это:

Dim MyArray (5, 4) ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число

Или Ρ‚Π°ΠΊ:

Dim MyArray (ΠΎΡ‚ 1 Π΄ΠΎ 5, ΠΎΡ‚ 1 Π΄ΠΎ 6) ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ объявлСнии Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹
Π½Π°Ρ‡Π°Ρ‚ΡŒ с 1, Π° Π½Π΅ с 0.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π²Ρ‹ΡˆΠ΅ — это Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅,
просто Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ число:

Dim MyArray (5, 4, 6) ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число
Dim MyArray (ΠΎΡ‚ 1 Π΄ΠΎ 5, ΠΎΡ‚ 1 Π΄ΠΎ 4, ΠΎΡ‚ 1 Π΄ΠΎ 6) ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ ΠΌΡ‹ создадим Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ распСчатаСм массивы
значСния Π² ячСйках элСктронной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Sub ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ ArrayExercise_3 . (Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свою ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ
ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΡƒΡ€ΠΎΠΊΠ°, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.)
Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки ΠΊΠΎΠ΄Π° Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ эту строку:

Dim MyArray (2, 3) ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число

УстанавливаСт Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом ΠΊΠ°ΠΊ ΠΎ строках ΠΈ столбцах Π² вашСй элСктронной Ρ‚Π°Π±Π»ΠΈΡ†Π΅.
2 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ 3 строки (ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΎΡ‚ 0 Π΄ΠΎ 2). 3 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ 4 столбца.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ эти строки:

MyArray (0, 0) = 10
MyArray (0, 1) = 10
MyArray (0, 2) = 10
MyArray (0, 3) = 10

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ строка 0, столбСц 0 ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10, строка 0, столбСц 1 ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
10, столбСц 2 строки 0 ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10, Π° столбСц 3 строки 0 ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² элСктронной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅Ρ‚ строки ΠΈΠ»ΠΈ столбца 0, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ
ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ это Π² Ρ†ΠΈΠΊΠ»Π΅. А ΠΏΠΎΠΊΠ° Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ значСния для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π²
2-ΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы:

MyArray (1, 0) = 20
MyArray (1, 1) = 20
MyArray (1, 2) = 20
MyArray (1, 3) = 20
MyArray (2, 0) = 30
MyArray (2, 1) = 30
MyArray (2, 2) = 30
MyArray (2, 3) = 30

НовыС строки Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ значСния ΠΊ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ позициям Π² массивС.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ всС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² 2-D, Π²Π°ΠΌ понадобится двойная пСтля. Двойная пСтля
ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ» Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Ρ†ΠΈΠΊΠ» заботится ΠΎ строках, Π°
Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» заботится ΠΎ столбцах. (Π‘Ρ‚Ρ€ΠΎΠΊΠΈ — это ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ
ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки MyArray , Π° столбСц — Π²Ρ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ
ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ скобками MyArray )

Для Ρ†ΠΈΠΊΠ»Π°, внСшнСго Ρ†ΠΈΠΊΠ»Π° Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ это:

Для i = ΠΎΡ‚ 0 Π΄ΠΎ 2

Π”Π°Π»Π΅Π΅ i

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ», Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ:

Для i = ΠΎΡ‚ 0 Π΄ΠΎ 2

Для j = ΠΎΡ‚ 0 Π΄ΠΎ 3

Π”Π°Π»Π΅Π΅ j

Π”Π°Π»Π΅Π΅ i

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° — j , Π° Π½Π΅ i .Но ΠΎΠ½ΠΈ
— это просто ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, поэтому ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.
Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ внСшний Ρ†ΠΈΠΊΠ» ΠΈΠ΄Π΅Ρ‚ ΠΎΡ‚ 0 Π΄ΠΎ 2, Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΈΠ΄Π΅Ρ‚
ΠΎΡ‚ 0 Π΄ΠΎ 3. Они ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ числам Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках MyArray.
ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΅Π³ΠΎ настраиваСм.

Код Ρ†ΠΈΠΊΠ»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄Ρ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ For ΠΈ Next.
Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°:

Π―Ρ‡Π΅ΠΉΠΊΠΈ (i + 1, j + 1). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = MyArray (i, j)

Π­Ρ‚ΠΎ довольно слоТно, поэтому ΠΌΡ‹ рассмотрим Π΅Π³ΠΎ.ВзглянитС Π½Π° Ρ‡Π°ΡΡ‚ΡŒ Cells:

Π―Ρ‡Π΅ΠΉΠΊΠΈ (i + 1, j + 1)

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наши массивы настроСны Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ с 0, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 1 ΠΊ i ΠΈ
Π”ΠΆ . Если Π±Ρ‹ ΠΌΡ‹ этого Π½Π΅ сдСлали, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° значСния Π±Ρ‹Π»ΠΈ Π±Ρ‹
Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ:

Π―Ρ‡Π΅ΠΉΠΊΠΈ (0, 0)

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Excel Π½Π΅Ρ‚ строки 0 ΠΈ столбца 0.

На случай, Ссли Π²Π°ΠΌ интСрСсно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· Ρ†ΠΈΠΊΠ» Π΄Π°Π΅Ρ‚ значСния
0, 0 для ячССк, Π²ΠΎΡ‚ объяснСниС.

ΠŸΠ΅Ρ€Π²Π°Ρ строка внСшнСго Ρ†ΠΈΠΊΠ»Π° — это Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ». Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вСсь
Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚ 0 Π΄ΠΎ 3. Π—Π°Ρ‚Π΅ΠΌ VBA ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ Next i
линия. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ i послС 0 — 1. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ условиС для внСшнСго Ρ†ΠΈΠΊΠ»Π°,
ΠΎΠ΄Π½Π°ΠΊΠΎ это 2, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ с внСшним Ρ†ΠΈΠΊΠ»ΠΎΠΌ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ снова ΠΎΠ½ ΠΏΠ°Π΄Π°Π΅Ρ‚
Π²Π½ΠΈΠ·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄. Π•Π³ΠΎ ΠΊΠΎΠ΄ просто являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ, поэтому ΠΎΠ½
снова выполняСт вСсь этот Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ». Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, внСшний Ρ†ΠΈΠΊΠ»
повторяСтся ΠΎΡ‚ 0 Π΄ΠΎ 2 Ρ€Π°Π·.Пока ΠΎΠ½ крутится, ΠΎΠ½
Ρ‚Π°ΠΊ ΡƒΠΆ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ запустит Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΎΡ‚ 0 Π΄ΠΎ 3 Ρ€Π°Π·.

Π’ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· значСния Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅ Π±ΡƒΠ΄ΡƒΡ‚:

0, 0
0, 1
0, 2
0, 3

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅ значСния для i ΠΈ j Π±ΡƒΠ΄ΡƒΡ‚
Π±Ρ‹Ρ‚ΡŒ:

1, 0
1, 1
1, 2
1, 3

Π’ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ€Π°Π· Π±ΡƒΠ΄Π΅Ρ‚:

2, 0
2, 1
2, 2
2, 3

Π˜Ρ‚Π°ΠΊ, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ i , ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· увСличиваСтся Π½Π° 1.Π­Ρ‚ΠΈ
ряды. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ число, j , всСгда Π±ΡƒΠ΄Π΅Ρ‚ 0, 1, 2, Π° Π·Π°Ρ‚Π΅ΠΌ 3 (столбцы).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ послС Π·Π½Π°ΠΊΠ° равСнства Π² строкС Cells ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

= MyArray (i, j)

i ΠΈ j ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ скобками MyArray Π±ΡƒΠ΄ΡƒΡ‚
ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с числами Π²Ρ‹ΡˆΠ΅.

Но вСсь ваш ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ЗапуститС ΠΊΠΎΠ΄ ΠΈ посмотритС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ ΠΊ своСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΈ Π²Ρ‹
Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ это:

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ слоТными для понимания,
Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Ссли Π΅Ρ‰Π΅ Π½Π΅ всС успСло. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ это нСсколько Ρ€Π°Π·, ΠΈ Π²Ρ‹
Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ†Π΅Π»ΠΈ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Split ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ
это относится ΠΊ массивам.

Ѐункция раздСлСния VBA Π² Excel>

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ бСсплатных ΠΎΠ½Π»Π°ΠΉΠ½-курсов здСсь, Π½Π° нашСм основном сайтС Home and Learn

Β© АвторскиС ΠΏΡ€Π°Π²Π° Π½Π° всС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ курса ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ КСн ΠšΠ°Ρ€Π½ΠΈ

.

ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ массива — Visual Basic

  • 3 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

Π Π°Π·ΠΌΠ΅Ρ€ — это Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ элСмСнтов массива. Массив, содСрТащий ΠΎΠ±Ρ‰ΡƒΡŽ сумму ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь мСсяца, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ (дСнь мСсяца).Массив, содСрТащий ΠΎΠ±Ρ‰ΠΈΠΉ объСм ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»Π°ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ дня мСсяца, ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° измСрСния (Π½ΠΎΠΌΠ΅Ρ€ ΠΎΡ‚Π΄Π΅Π»Π° ΠΈ дСнь мСсяца). Число ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ массива называСтся Π΅Π³ΠΎ Ρ€Π°Π½Π³ΠΎΠΌ .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство Rank, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сколько ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ массив.

Π Π°Π±ΠΎΡ‚Π° с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ

Π’Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ элСмСнт массива, прСдоставляя индСкс ΠΈΠ»ΠΈ индСкс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡŽ ΠΎΡ‚ индСкса 0 Π΄ΠΎ самого высокого индСкса для этого измСрСния.

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… рисунках ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ структура массивов Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€Π°Π½Π³Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π½Π° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡΡ… ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ значСния индСкса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, ΡƒΠΊΠ°Π·Π°Π² индСксы (1, 0) .

Одно ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅

МногиС массивы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ количСство людСй ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ возраста.ЕдинствСнноС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ для указания элСмСнта — это возраст, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ этот элСмСнт содСрТит счСт. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊΠΎΠΉ массив ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ индСкс. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пСрСмСнная для хранСния ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива счСтчиков возрастов ΠΎΡ‚ 0 Π΄ΠΎ 120.

  Dim ageCounts (120) As UInteger
  

Π”Π²Π° измСрСния

НСкоторыС массивы ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²Π° измСрСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ количСство офисов Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этаТС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ здания Π² унивСрситСтском Π³ΠΎΡ€ΠΎΠ΄ΠΊΠ΅. БпСцификация элСмСнта Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° здания, ΠΈ этаТа, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт содСрТит счСт для этой ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ здания ΠΈ этаТа.Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊΠΎΠΉ массив ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° индСкса. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пСрСмСнная для хранСния Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива количСства офисов для Π·Π΄Π°Π½ΠΈΠΉ с 0 ΠΏΠΎ 40 ΠΈ этаТСй с 0 ΠΏΠΎ 5.

  Dim officeCounts (40, 5) ΠΊΠ°ΠΊ Π±Π°ΠΉΡ‚
  

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Ρ‚Π°ΠΊΠΆΠ΅ называСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ массивом .

Π’Ρ€ΠΈ измСрСния

НСкоторыС массивы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Ρ€ΠΈ измСрСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ значСния Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС. Π’Π°ΠΊΠΎΠΉ массив ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρ€ΠΈ индСкса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x, y ΠΈ z физичСского пространства.Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пСрСмСнная для хранСния Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€ Π²ΠΎΠ·Π΄ΡƒΡ…Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ объСма.

  ΠŸΡ€ΠΈΠ³Π»ΡƒΡˆΠ΅Π½Π½Π°Ρ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° Π²ΠΎΠ·Π΄ΡƒΡ…Π° (99, 99, 24) ΠΊΠ°ΠΊ одиночная
  

Π‘ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π΅Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ

Π₯отя массив ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎ 32 ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, Ρ€Π΅Π΄ΠΊΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ большС Ρ‚Ρ€Π΅Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Когда Π²Ρ‹ добавляСтС измСрСния Π² массив, ΠΎΠ±Ρ‰ΠΈΠΉ объСм памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для массива, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ увСличиваСтся, поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ.

ИспользованиС Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ²

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ суммы ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ мСсяца. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· 31 элСмСнта, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь мСсяца, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

  ВусклыС ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ (30) ΠΊΠ°ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ дня мСсяца, Π½ΠΎ ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ мСсяца Π² Π³ΠΎΠ΄Ρƒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив с 12 строками (для мСсяцСв) ΠΈ 31 столбцом (для Π΄Π½Π΅ΠΉ), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

  ВусклыС ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ (11, 30) ΠΊΠ°ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² массивС Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ объСм ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π·Π° 5 Π»Π΅Ρ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив с 5 слоями, 12 строками ΠΈ 31 столбцом, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

  ВусклыС ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ (4, 11, 30) ΠΊΠ°ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ индСкс измСняСтся ΠΎΡ‚ 0 Π΄ΠΎ максимального, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ salesAmounts ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π΄Π»ΠΈΠ½Π° Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ мСньшС Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ для этого измСрСния.Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива увСличиваСтся с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ. Π’Ρ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… — 31, 372 ΠΈ 1860 элСмСнтов соотвСтствСнно.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив Π±Π΅Π· использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Dim ΠΈΠ»ΠΈ прСдлоТСния New . НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ CreateInstance, ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ массив, созданный Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Π°ΠΊΠΎΠΉ массив ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ‚ 0. Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ измСрСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetLowerBound ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ LBound .

Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅

.

массивов VBA — ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅

ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ массивы с Π»ΡŽΠ±Ρ‹ΠΌ количСством ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 20, хотя Ρƒ вас, вСроятно, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 3 ΠΈΠ»ΠΈ 4 максимумов.
ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎ 60 ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.
ΠžΡ‡Π΅Π½ΡŒ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.
ΠŸΡ€ΠΈ использовании Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов всСгда Π΅ΡΡ‚ΡŒ столбцы ΠΈ строки (Ρ‚.Π΅. (1,1) (1,2) (1,3) ΠΈ Ρ‚. Π”.).
МоТно Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ vArrayName (1, 2, 1) Π² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ???

ЀиксированныС массивы

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ фиксированный массив ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Dim.

 Dim aCellValues ​​(ΠΎΡ‚ 1 Π΄ΠΎ 10, 1 Π΄ΠΎ 100) ΠΊΠ°ΠΊ строка 

Π­Ρ‚ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ индСкс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ находится Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 1 Π΄ΠΎ 10, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ индСкс — ΠΎΡ‚ 1 Π΄ΠΎ 100.

 aCellValues ​​(2,3) = "some text" 

Dynamic Arrays

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ объявлСн Π² Π΄Π²ΡƒΡ… строках

 Dim aNumbers () As Integer 
ReDim aNumbers (ΠΎΡ‚ 1 Π΄ΠΎ 10, ΠΎΡ‚ 1 Π΄ΠΎ 100)

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ReDim, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ количСство ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ измСрСния.
Волько вСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π° послСднСго измСрСния Π² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°.
Ошибка выполнСния Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚, Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅.

 Dim sCellValues ​​(ΠΎΡ‚ 1 Π΄ΠΎ 50, ΠΎΡ‚ 1 Π΄ΠΎ 10) ΠΊΠ°ΠΊ строка 

ReDim aCellValues ​​(ΠΎΡ‚ 1 Π΄ΠΎ 50, ΠΎΡ‚ 1 Π΄ΠΎ 20)
ReDim aCellValues ​​(ΠΎΡ‚ 1 Π΄ΠΎ 50, ΠΎΡ‚ 1 Π΄ΠΎ 20) ΠΊΠ°ΠΊ строка

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Preserve, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ количСство ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.
Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Preserve, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднСго измСрСния.

Ѐункция массива

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… свСдСний см. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρƒ Ѐункция массива .
Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

 Dim vArray As Variant 
vArray = Array (Array ("one"), Array ("Two"), Array ("three"), Array ("four"))

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

Π‘ΠΎΠ»ΡŒΡˆΠΈΠΌ нСдостатком использования ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС измСрСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….
Π’ΠΈΠΏΡ‹, опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ нСсколько Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….
ВмСсто этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….


Β© 2020 Better Solutions Limited. ВсС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹. Β© 2020 Better Solutions Limited TopPrevNext.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *