Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«VBA для Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 77

Автор Π‘Ρ‚ΠΈΠ² Каммингс

ОбъявлСниС динамичСских массивов

ΠžΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ массив ΠΊΠ°ΠΊ динамичСский Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях.

* Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

* Если Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² Ρ…ΠΎΠ΄Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

* Если послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ использования массива Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΈΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ (большиС массивы ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΌΠ°Π»ΠΎ памяти, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ для использования динамичСских массивов).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ динамичСский массив, просто Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΡ€ΠΈ Π΅Π³ΠΎ объявлСнии. НапримСр, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

Dim dateДниРоТдСния () As Date

ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ VBA ΠΊ использованию массива элСмСнтов Ρ‚ΠΈΠΏΠ° Date, Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ создавая ΠΏΠΎΠΊΠ° массив.

ДинамичСский массив Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ создадитС массив Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ, ΡƒΠΊΠ°Π·Π°Π² Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ReDim, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом:

ReDim dateДниРсТдСний (intЧислоДнСйРоТдСния - 1)

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ создаваСмого этим ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ массива задаСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ приходится ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ Π½Π° 1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти число элСмСнтов массива Π² соотвСтствиС с ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠΉ VBA Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ массивов ΠΎΡ‚ 0, Ссли, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ систСму Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΡΡ‚ΡƒΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΎΡΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "НумСрация элСмСнтов массива".

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ReDim Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π½ΡƒΠΆΠ½ΠΎ, задавая ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹Π΅ числа размСрности ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². Волько Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива Π΅Π³ΠΎ содСрТимоС ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ уничтоТаСтся. НСльзя Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… массиву, Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условиях, ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ здСсь ΠΌΠ½Π΅ каТСтся излишнС слоТным.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ вмСстС с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ReDim ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Preserve. Вакая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ динамичСский массив, создаСт Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡŽ, Π½Π΅ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Ρ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π΄Π°Π½Π½Ρ‹Π΅:

Dim dblGalacticMasses () As Double

* * *

ReDim Preserve dblGalacticMasses (1 To 30, 1 To 50)

* * *

ReDim Preserve dblGalacticMasses (1 To 30, 1 To 100)

На самом Π΄Π΅Π»Π΅ возмоТности Preserve вСсьма ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ - ΠΏΡ€ΠΈ использовании этого ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Π½Π΅ допускаСтся ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массива ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднСго измСрСния (Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ReDim Preserve ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ). ΠŸΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива мСньшС, Π½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Ρ…Ρ€Π°Π½ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… элСмСнтах, Π±ΡƒΠ΄ΡƒΡ‚ утСряны навсСгда.

Π§Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ элСмСнт массива, Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΠΉΡ‚Π΅ имя массива, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ скобки с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² Π½ΠΈΡ… индСксом этого элСмСнта. ИндСкс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ значСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ массива. НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ strSayings (4, 6), ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ строковыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· строки 4 ΠΈ столбца 6 Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС строк.

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ числа ΠΈΠ»ΠΈ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² индСксС для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ элСмСнта массива, зависят ΠΎΡ‚ систСмы Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²Π°ΠΌΠΈ ΠΏΡ€ΠΈ объявлСнии массива. Если массив объявлСн ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Dim strSayings ( 10, 20 ) As String, Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ strSayings (4, 6) ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· пятой строки сСдьмого столбца массива. Но Ссли массив объявлСн Dim strSayings ( 4 To 10, 6 Π’ΠΎ 50) As String, Ρ‚ΠΎ ΠΆΠ΅ самоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ столбца.

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… описанной систСмы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты массива ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

* ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ элСмСнту массива Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅; Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ присваиваСтся X ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ элСмСнту Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Currency:

curBigDough ( 5, 8, 19 ) = 27.99

* ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, хранящССся Π² массивС, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

datThatDate = datTheseDates ( 25,10)

* ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

intA = 35 * ( intB + intCounts ( 3,2 ) )

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


Sub FortuneTeller()

Dim strTodaysFortune(1 To 10)

Dim intUserChoice As Integer

strTodaysFortune(1) = _

"Π’Ρ‹ станСтС Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΌ ΠΈ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹ΠΌ Π½Π° 15 ΠΌΠΈΠ½ΡƒΡ‚ . "

strTodaysFortune(2) = _

"Π’Π°ΠΌ прСдстоит ΠΎΠ±Π΅Π΄ с высоким Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ†Π΅ΠΌ ."

strTodaysFortune(3) = "Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… Π°ΠΊΡ†ΠΈΠΉ удвоится!"

strTodaysFortune(4) = _

"Π’Ρ‹ вспомнитС, Π³Π΄Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ свои ΠΊΠ»ΡŽΡ‡ΠΈ."

strTodaysFortune(5) = _

"Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π±ΡƒΠΊΠ΅Ρ‚ ΠΎΡ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ почитатСля."

strTodaysFortune(6) = "Π’Ρ‹ ΠΎΠΏΠΎΠ·Π΄Π°Π΅Ρ‚Π΅ Π½Π° ΠΎΠ±Π΅Π΄."

strTodaysFortune(7) = "ВсС ваши ΠΌΠ΅Ρ‡Ρ‚Ρ‹ сбудутся."

strTodaysFortune(8) = _

"Π’Π°ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ взятыС Ρƒ вас Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ ΠΊΠ½ΠΈΠ³ΠΈ."

strTodaysFortune(9) = _

"Никто Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ Π²Π°ΡˆΠΈΡ… Ρ€Π°Π·Π½Ρ‹Ρ… носков."

strTodaysFortune(l0) = _

"Π’Ρ‹ встрСтитС своСго старого Π΄Ρ€ΡƒΠ³Π° Π² супСрмаркСтС."

intUserChoice = InputBox("Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ своС Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅," _

& " Π²Π²Π΅Π΄ΠΈΡ‚Π΅ число ΠΎΡ‚ 1 Π΄ΠΎ 10")

MsgBox (strTodaysFortune(intUserChoice))


ΠšΡΡ‚Π°Ρ‚ΠΈ, этот ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ сущСствСнно ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° запрос Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Input Box. О ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² Π³Π»Π°Π²Π΅ 10.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ubound, которая особСнно ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с динамичСскими массивами, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ динамичСский массив ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠ΅ число элСмСнтов. Бинтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ UBound ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

UBound [имя_массива, ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅]

АргумСнт имя_массива, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π·Π°Π΄Π°Π΅Ρ‚ имя массива, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ, Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ подскаТСт VBA, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ массива вас интСрСсуСт. Если ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, функция UBound Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ измСрСния массива.

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ создании массива Π΅Π³ΠΎ элСмСнты Π½Π΅ содСрТат Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Π°ΠΊΠ°Π½Ρ‚Π½Ρ‹Π΅ мСста массива подходящими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Если Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ сразу ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΡƒΡ‡ΡˆΠ΅ всСго для этого ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ For . . . Next, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ массива. Для счСтчика Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выбираСтся врСмСнная пСрСмСнная, объявляСмая Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅, содСрТащСй всС эти Ρ†ΠΈΠΊΠ»Ρ‹.

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ нСбольшой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив заполняСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ†Π΅Π»Ρ‹ΠΌΠΈ значСниями начиная с 1. Π’ΠΎΡ‚ Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄:


Const Size As Integer = 3

Dim dblMatrix (1 To Size, l To Size, l To Size) As Double

Sub ArrayFiller ( )

Dim I As Integer, J As Integer, К As Integer, X As Integer

X = 1

For I = 1 To Size

For J = 1 To Size

For К = 1 To Size

dbl Matrixf l, J, K) = X

X = X + 1

Next К

Next J

Next I

End Sub


ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ влоТСния Ρ†ΠΈΠΊΠ»ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ порядок заполнСния массива Π΄Π°Ρ‡Π½Ρ‹ΠΌΠΈ. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΡ‚ порядка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ элСмСнты массива, часто зависят ΠΈ ΠΈΡ… значСния.

ΠžΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° словах слишком слоТно, поэтому я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рисунки. Π‘Π½ΠΎΠ²Π° обратимся ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π² Π²ΠΈΠ΄Π΅ ΠΊΡƒΠ±Π°, слоТСнного ΠΈΠ· ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΊΡƒΠ±ΠΈΠΊΠΎΠ², ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΡ… элСмСнты массива.

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ этого мыслСнного экспСримСнта ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° рис. 13.2.


Рис. 13.2. Π­Ρ‚ΠΎΡ‚ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ прСдставляСт массив для хранСния Π΄Π°Π½Π½Ρ‹Ρ…; стрСлки с Π±ΡƒΠΊΠ²Π°ΠΌΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ измСрСниям массива

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π³Π»Π°Π²Π½ΠΎΠΉ строкС этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, dblMatrix ( I, J, К) = X, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ I, J ΠΈ К ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ соотвСтствСнно ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ измСрСния массива. На рис. 13.2 я ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°Π·Π½Π°Ρ‡ΠΈΠ» эти Π±ΡƒΠΊΠ²Ρ‹ сторонам ΠΊΡƒΠ±Π°, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΌ Π΅Π³ΠΎ измСрСния.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотритС, ΠΊΠ°ΠΊ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ†ΠΈΠΊΠ»Π°Ρ… For . . . Next. Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ внСшнСго Ρ†ΠΈΠΊΠ»Π° являСтся I, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ- J ΠΈ послСднСго, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ, - К. НуТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ VBA Π½Π°Ρ‡Π½Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°, пройдя ΠΊ Π½Π΅ΠΌΡƒ сквозь всС содСрТащиС Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Ρ‹. ΠšΡƒΠ±Ρ‹ Π½Π° рис. 13.3 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² самом Π½Π°Ρ‡Π°Π»Π΅ заполнСния массива ΠΈΠ· этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

Π› ΠΏΠΎΠΊΠ° этот Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» выполняСтся, VBA Π½Π΅ мСняСт значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… I ΠΈ J. Когда Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ шаг ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ»- Ρ†ΠΈΠΊΠ» J. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ J- ΠΈ снова начнСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ измСнится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» F Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ всС Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°. ПослС увСличСния Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ слой массива (рис. 13.4).

НадСюсь, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΊΠ°ΠΊ отраТаСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка влоТСния Ρ†ΠΈΠΊΠ»ΠΎΠ² Π½Π° порядкС заполнСния массива. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ порядок влоТСния Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ, ΠΈ счСтчиком внСшнСго Ρ†ΠΈΠΊΠ»Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ стало К. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈ этом ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ присваивания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π½Π° ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ… мСстах):