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

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

ОбъявлСниС динамичСских массивов. VBA для Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²

ОбъявлСниС динамичСских массивов. VBA для Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²

Π’ΠΈΠΊΠΈΠ§Ρ‚Π΅Π½ΠΈΠ΅

VBA для Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²
Каммингс Π‘Ρ‚ΠΈΠ²

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

БозданиС массивов

БозданиС массивов
Массивом Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ мноТСство ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΡ… Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ AutoCAD – это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, располоТСнных Π½Π° Ρ€Π°Π²Π½ΠΎΠΌ расстоянии Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ массивы связаны со смСщСниСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ

8.1.4. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ массивов

8.1.4. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ массивов
ΠŸΡ€ΠΈ сравнСнии массивов Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ нСоТиданности β€” Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны!Для сравнСния массивов слуТит ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра <=>. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… контСкстах, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ -1 (мСньшС), 0 (Ρ€Π°Π²Π½ΠΎ) ΠΈΠ»ΠΈ 1 (большС). ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ == ΠΈ != ΠΎΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π½Π°

8.1.22. Π§Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ массивов

8.1.22. Π§Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ массивов
ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π° массива ΠΈ Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит массивы ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов, взятых ΠΈΠ· соотвСтствСнных ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ исходных массивов. Π’ послСдних вСрсиях Ruby ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Enumerable содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ zip:a = [1, 2, 3, 4]b = [Β«aΒ», Β«bΒ», Β«cΒ», Β«dΒ»]с =

ГЛАВА 15. CIL ΠΈ Ρ€ΠΎΠ»ΡŒ динамичСских ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²

ГЛАВА 15. CIL ΠΈ Ρ€ΠΎΠ»ΡŒ динамичСских ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²
Π’ этой Π³Π»Π°Π²Π΅ ставится Π΄Π²Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π³Π»Π°Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн синтаксис ΠΈ сСмантика языка CIL (Common Intermediate Language – ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык) Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, Ρ‡Π΅ΠΌ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ…. ЧСстно говоря, ΠΏΡ€ΠΈ

Π£ΠšΠΠ—ΠΠ’Π•Π›Π˜ ΠœΠΠ‘Π‘Π˜Π’ΠžΠ’

Π£ΠšΠΠ—ΠΠ’Π•Π›Π˜ ΠœΠΠ‘Π‘Π˜Π’ΠžΠ’
     ΠšΠ°ΠΊ Π±Ρ‹Π»ΠΎ сказано Π² Π³Π». 9, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с символичСскими адрСсами. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ адрСса, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ адрСса

Π“Π»Π°Π²Π° 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ динамичСских ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов

Π“Π»Π°Π²Π° 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ динамичСских ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов
2.0. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
Когда iPhone Ρ‚ΠΎΠ»ΡŒΠΊΠΎ появился Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅, ΠΎΠ½ поистинС Π·Π°Π΄Π°Π» стандарт интСрактивности Π² ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… прилоТСниях. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ iOS Π±Ρ‹Π»ΠΈ ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°

2.4. ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… динамичСских элСмСнтов Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ

2.4. ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… динамичСских элСмСнтов Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ
ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ
ВрСбуСтся ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ динамичСскиС элСмСнты, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΈΠ΄Ρ‹, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ двиТСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° автоматичСски ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ. Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ

Π’ΠΈΠΏΡ‹ массивов

Π’ΠΈΠΏΡ‹ массивов
Firebird позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Π΅ массивы для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ИспользованиС массива позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ мноТСство элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ дискрСтных, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… элСмСнтов Π² ΠΎΠ΄Π½ΠΎΠΌ столбцС. Firebird ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Ρ†Π΅Π»Ρ‹ΠΌ массивом,

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массивов

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массивов
Массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ Π΄ΠΎΠΌΠ΅Π½ (с использованиСм CREATE DOMAIN) ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ столбСц Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ CREATE TABLE ΠΈΠ»ΠΈ ALTER TABLE. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π° ΠΈΠ»ΠΈ столбца ΠΊΠ°ΠΊ массива ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, здСсь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ добавляСтся ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅

БозданиС массивов

БозданиС массивов
Массивом Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ мноТСство ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΡ… Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ AutoCAD – это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, располоТСнных Π½Π° Ρ€Π°Π²Π½ΠΎΠΌ расстоянии Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ массивы связаны со смСщСниСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ

Π’Ρ‹Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° соглашСний для динамичСских псСвдонимов

Π’Ρ‹Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° соглашСний для динамичСских псСвдонимов
ΠžΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Ρ‹Π΅ послСдствия ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ присваивания с участиСм ссылок ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΉ вопрос ΠΎ цСлСсообразности сохранСния динамичСских псСвдонимов Π² нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ вычислСний.ΠžΡ‚Π²Π΅Ρ‚ β€” частично тСорСтичСский ΠΈ

РСвизия массивов

РСвизия массивов
Набросок Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠ³ΠΎ класса ARRAY Π΄Π°Π½ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π² состоянии Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ подходящСС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π€ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ понятиС массива Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ задания прСдусловий, постусловий ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ, Π½ΠΎ всС Π΅Ρ‰Π΅ схСматичный

Π’Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов

 

Для Π²Π²ΠΎΠ΄Π° элСмСнтов Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ InputBox ΠΈ Cells, для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ – ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ MsgBox.

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

ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΏΠΎ строкам ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ внСшнСго Ρ†ΠΈΠΊΠ»Π° являСтся индСксная пСрСмСнная, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π°Ρ Π½ΠΎΠΌΠ΅Ρ€ строки, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ – индСксная пСрСмСнная, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π°Ρ Π½ΠΎΠΌΠ΅Ρ€ столбца.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 25: Π²Π²ΠΎΠ΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ А, содСрТащСй n строк ΠΈ m столбцов. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ j – столбцы.

Dim n As Integer, m As Integer

Dim i As Integer, j As Integer

Dim Int_Array() As Integer

n = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк массива»)

m = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов массива»)

ReDim Int_Array(n, m)

For i = 1 To n

For j = 1 To m

Int_Array(i, j) = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Β» & «элСмСнта_ (Β» & i & Β«,Β» & j & Β«) Β«, Β«Π’Π²ΠΎΠ΄ элСмСнтов массива; строка Β» & i)

Next j

Next i

 

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ фиксированного значСния Π½ΠΎΠΌΠ΅Ρ€Π° строки i, осущСствляСтся ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ индСкса j, Ρ‚. Π΅. вводится строка. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° (ΠΏΠΎ j) Π½ΠΎΠΌΠ΅Ρ€ строки i увСличиваСтся Π½Π° 1 ΠΈ Π²Π²ΠΎΠ΄ элСмСнтов производится с Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ, Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ столбца j.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ вмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° InputBox ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Cells. Π’ этом случаС элСмСнты ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ записаны ΠΏΠΎ строкам Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ листС Excel. Π’ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ способ Π²Π²ΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° элСмСнт массива вычисляСтся ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅, Π³Π΄Π΅ Π² качСствС Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° строк ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° столбцов.

 

Dim n As Integer, m As Integer

Dim i As Integer, j As Integer

Dim Int_Array() As Integer

n = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк массива»)

m = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов массива»)

ReDim Int_Array(n, m)

For i = 1 To n

For j = 1 To m

Int_Array(i, j) = Cells (i,j)

Next j

Next i

 

Dim n As Integer, m As Integer

Dim i As Integer, j As Integer

Dim Int_Array() As Integer

n = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк массива»)

m = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов массива»)

ReDim Int_Array(n, m)

For i = 1 To n

For j = 1 To m

Int_Array(i, j) =. ..

Next j

Next i

 

ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ элСмСнтов Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΏΠΎ столбцам ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ внСшнСго Ρ†ΠΈΠΊΠ»Π° выбираСтся Π½ΠΎΠΌΠ΅Ρ€ столбца j, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ – строки i.

 

Dim n As Integer, m As Integer

Dim i As Integer, j As Integer

Dim Int_Array() As Integer

n = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк массива»)

m = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов массива»)

ReDim Int_Array(n, m)

For j = 1 To m

For i = 1 To n

Int_Array(i, j) = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Β» & «элСмСнта_ (Β» & i & Β«,Β» & j & Β«) Β«, Β«Π’Π²ΠΎΠ΄ элСмСнтов массива; строка Β» & i)

Next i

Next j

 

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

Алгоритмы Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅.

 

str_msg = «»

For i = 1 To n

For j = 1 To m

str_msg = str_msg & Int_Array(i, j) & Β«, Β«

Next j

str_msg = str_msg & Chr(13) β€˜ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки

Next i

MsgBox Β«Π’Π²Π΅Π΄Π΅Π½ΠΎ: Β» & Chr(13) & str_msg,, Β» Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π°Π½Π΅Π΅ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ массива»

 

По этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ элСмСнты ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. Π‘Ρ‚Ρ€ΠΎΠΊΠ°

str_msg = str_msg & Chr(13)

ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ строчкС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Β«ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈΒ» ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ напСчатаСтся очСрСдная строка).

 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 26. Π’Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

 

Sub DemoStatArray()

Dim str_msg As String

Dim n As Integer, m As Integer

Dim i As Integer, j As Integer

Dim Int_Array() As Integer

n = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк массива»)

m = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов массива»)

ReDim Int_Array(n, m)

For i = 1 To n

For j = 1 To m

Int_Array(i, j) = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Β» & «элСмСнта_ (Β» & i & Β«,Β» & j & Β«) Β«, Β«Π’Π²ΠΎΠ΄ элСмСнтов массива; строка Β» & i)

Next j

Next i

str_msg = «»

For i = 1 To n

For j = 1 To m

str_msg = str_msg & Int_Array(i, j) & Β«, Β«

Next j

str_msg = str_msg & Chr(13) β€˜ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки

Next i

MsgBox Β«Π’Π²Π΅Π΄Π΅Π½ΠΎ: Β» & Chr(13) & str_msg,, Β«Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π°Π½Π΅Π΅ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ массива Β«

End Sub

 

 

 

 

 

9. 12.8. ИспользованиС ReDim с динамичСскими массивами

 

Иногда ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΎΡ‡Π½ΠΎ нСизвСстно, сколько элСмСнтов потрСбуСтся Π² массивС. Π’ VBA имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массивов, Π° Π²ΠΎ врСмя объявлСния Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ динамичСский массив, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ массив Ρ‚Π°ΠΊΠΎΠΉ большой ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ малСнький, ΠΊΠ°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ДинамичСскиС массивы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Dim, Π·Π°Ρ‚Π΅ΠΌ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ устанавливаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ReDim Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ R eDim ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

 

ReDim [Preserve] varname (subscripts) [As type] [varname_

(subscripts) [As type]]

 

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Preserve ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ VBA ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡΡ массивС, ΠΊΠΎΠ³Π΄Π° измСняСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ReDim; varname – имя массива; subscripts – это Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива; type – Ρ‚ΠΈΠΏ элСмСнтов массива. НСобходимо ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ As type для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСтся.

 

Dim aMonth() As String
ReDim aMonth(1 To 30)
ReDim aMonth(31)
ReDim Preserve aMonth(1 To 31)
 
Dim Table()As Integer
ReDim Table (3, 15)
ReDim Table(4, 20)
ReDim Preserve Table(4, 25)
Dim Mas as Variant
ReDim Mas(20) As Integer
β€˜ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ динамичСский массив aMonth
β€˜ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎ 30 элСмСнтов
β€˜ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎ 31 элСмСнта
β€˜ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎ 31 элСмСнта, сохраняя содСрТимоС массива
β€˜ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ динамичСский массив
β€˜Π΄Π΅Π»Π°Π΅Ρ‚ массив Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ
β€˜ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива
β€˜Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСняСт послСдний Ρ€Π°Π·ΠΌΠ΅Ρ€ массива
β€˜ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Variant
β€˜ΡΠΎΠ·Π΄Π°Π΅Ρ‚ массив 20 Ρ†Π΅Π»Ρ‹Ρ… Π² Variant

 

Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

1. МоТно ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднСС ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Preserve;

2. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ReDim для создания Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ массива Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Variant; Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° Variant ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ любого Ρ‚ΠΈΠΏΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Variant для сохранСния динамичСского массива. (ИспользованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Variant для сохранСния динамичСского массива Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ReDim ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… массива.)

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ReDim ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° динамичСского массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π±Ρ‹Π» объявлСн Ρ€Π°Π½Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Dim. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ReDim для измСнСния числа элСмСнтов ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π² динамичСском массивС ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Однако нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ReDim для измСнСния Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… массива, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ массив Π½Π΅ содСрТится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Variant ΠΈΠ»ΠΈ сами элСмСнты массива Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ Variant. Если динамичСский массив сохраняСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Variant, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ As type Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ReDim.

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

Option Base 1

Sub DemoDinArray()

Dim Int_Array() As Integer

Dim str_msg As String, i As Integer

Dim Num

str_msg = Β» Β«

i = 0

Do

i = i + 1

Num = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ число для Β» & i & Β«-Π³ΠΎ элСмСнта массива», Β«Π’Π²ΠΎΠ΄ элСмСнтов массива»)

If Len(Num) = 0 Then Exit Do β€˜ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°

β€˜ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива с сохранСниСм элСмСнтов

ReDim Preserve Int_Array(i)

β€˜Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… Π² i-ΠΉ элСмСнт’ массива

Int_Array(i) = Num

Loop

For j = 1 To i β€” 1

str_msg = str_msg & Int_Array(j) & Β«, Β«

Next j

MsgBox Β«Π’Π²Π΅Π΄Π΅Π½ΠΎ: Β» & str_msg,, Β«Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π° Π½Π΅Π΅ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ массива»

End Sub

 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 28. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ DemoDinArray Π² динамичСский массив Int_Array записываСтся пСрвая строка Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΈ опрСдСляСтся Π΅Π³ΠΎ вторая (количСство столбцов) Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²ΠΎ врСмя Π²Π²ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки отказался ΠΎΡ‚ Π²Π²ΠΎΠ΄Π°, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки заканчиваСтся. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ извСстна вторая Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива: m=i-1. Ѐункция MsgBox Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ввСсти ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массива Int_Array. Π”Π°Π»Π΅Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ этот Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π”Π°Π»Π΅Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Int_Arrayl ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Int_Array/

 

Option Base 1

Sub DemoDinArray2()

Dim Int_Arrayl() As Integer

Dim str_msg As String

Dim i As Integer, m As Integer, n As Integer

Dim Num

str_msg = «»

i = 0

Do

i = i + 1

Num = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ число для Β» & i & Β«-Π³ΠΎ элСмСнта массива», Β«Π’Π²ΠΎΠ΄ элСмСнтов массива»)

If Len(Num) = 0 Then Exit Do β€˜ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°

ReDim Preserve Int_Arrayl(i) β€˜ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива с сохранСниСм элСмСнтов

Int_Arrayl(i) = CStr(Num) β€˜Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… Π² i-ΠΉ элСмСнт массива

Loop

m = i β€” 1 β€˜Π²Ρ‚ΠΎΡ€Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массива

n = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк массива Β«)

ReDim Int_Array(n, m)

β€˜ запись Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ массив ΡƒΠΆΠ΅ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ строки

For j = 1 To m

Int_Array(1, j) = Int_Arrayl(j)

Next j

β€˜Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом,

β€˜Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку Π½Π΅ заполняСм:

For i = 2 To n

For j = 1 To m

Int_Array(i, j) = InputBox(Β«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ число для Β» & Β» элСмСнта (Β» & i & Β«,Β» & j & Β«)Β», Β«Π’Π²ΠΎΠ΄ элСмСнтов массива; строка Β» & i)

Next j

Next i

β€˜ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° строки Π²Ρ‹Π΄Π°Ρ‡ΠΈ

For i = 1 To n

For j = 1 To m

str_msg = str_msg & Int_Array(i, j) & Β«, Β«

Next j

str_msg = str_msg & Chr(13) β€˜ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки

Next i

MsgBox Β«Π’Π²Π΅Π΄Π΅Π½ΠΎ: Β» & Chr(13) & str_msg,, Β«Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π°Π½Π΅Π΅ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ массива»

End Sub


| ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ лСкция ==>
Π’Π²ΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов. Π’Ρ‹Π²ΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов| РСшСниС Π·Π°Π΄Π°Ρ‡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ:


Π”Π°Ρ‚Π° добавлСния: 2014-01-04; ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΎΠ²: 2792; ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ авторских ΠΏΡ€Π°Π²?; ΠœΡ‹ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π² написании вашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹!


Нам Π²Π°ΠΆΠ½ΠΎ вашС ΠΌΠ½Π΅Π½ΠΈΠ΅! Π‘Ρ‹Π» Π»ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»? Π”Π° | НСт



Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ динамичСского массива Π² VBA

спросил

ИзмСнСно
1 мСсяц Π½Π°Π·Π°Π΄

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ
78 тысяч Ρ€Π°Π·

Π― ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈ добавляю массив Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, пуста ячСйка ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π― Π½Π΅ слишком Π·Π½Π°ΠΊΠΎΠΌ с массивами Π² VBA, поэтому, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, моя Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π΅Π²Π΅Ρ€Π½Π°. Код ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ 1-ΠΉ элСмСнт Π² массивС, ΠΈ ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ увСличиваСтся. Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΏΠΎΡ‡Π΅ΠΌΡƒ UBound(myArray) всСгда остаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 0 Π΄Π°ΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ элСмСнту Π±Ρ‹Π» присвоСн 1-ΠΉ индСкс.0005

Мой ΠΊΠΎΠ΄ выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

 Dim myArray() As Double
ReDim Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΉ массив (0)
    Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ячСйки Π² [myRange]
        Если ячСйка <> "" Π’ΠΎΠ³Π΄Π°
            Если UBound(myArray) > 0 Π’ΠΎΠ³Π΄Π°
                ReDim Preserve myArray (ΠΎΡ‚ 0 Π΄ΠΎ UBound (myArray) + 1)
            ΠšΠΎΠ½Π΅Ρ†, Ссли
            ΠΌΠΎΠΉ массив (UBound (ΠΌΠΎΠΉ массив)) = ячСйка. Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
        ΠšΠΎΠ½Π΅Ρ†, Ссли
    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ
 
  • vba
  • динамичСскиС массивы

0

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ Π΅Π΅, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, Ссли пСрСмСнная большС, Ρ‡Π΅ΠΌ ubound, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ:

 Sub Test()
Dim myArray() ΠΊΠ°ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ, X ΠΊΠ°ΠΊ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ
Π₯ = 0
ReDim ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΉ массив (X)
Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ячСйки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚Β»)
    Если ячСйка <> "" Π’ΠΎΠ³Π΄Π°
        ReDim ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΉ массив (ΠΎΡ‚ 0 Π΄ΠΎ X)
        myArray(X) = ячСйка.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
        Π₯ = Π₯ + 1
    ΠšΠΎΠ½Π΅Ρ†, Ссли
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ
ΠšΠΎΠ½Π΅Ρ† сабвуфСра
 

2

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Если UBound(myArray) > 0, Ρ‚ΠΎ 9ΠžΡ‚ 0032 Π΄ΠΎ Если UBound(myArray) >= 0, Ρ‚ΠΎΠ³Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

 ΠŸΠΎΠ΄Ρ‚Π΅ΡΡ‚()
    Dim myArray() ΠΊΠ°ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ
    ReDim Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΉ массив (0)
    Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ячСйки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚Β»)
        Если ячСйка <> "" Π’ΠΎΠ³Π΄Π°
            Если UBound(myArray) >= 0 Π’ΠΎΠ³Π΄Π°
                ΠΌΠΎΠΉ массив (UBound (ΠΌΠΎΠΉ массив)) = ячСйка. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
                ReDim Preserve myArray (ΠΎΡ‚ 0 Π΄ΠΎ UBound (myArray) + 1)
            ΠšΠΎΠ½Π΅Ρ†, Ссли
        ΠšΠΎΠ½Π΅Ρ†, Ссли
    Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ
ΠšΠΎΠ½Π΅Ρ† сабвуфСра
 

6

Π Π°ΡΡˆΠΈΡ€ΡΡ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Дэна Π”ΠΎΠ½ΠΎΡ…ΡŒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ расчСта (ΠΈ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ пСрСсчСта Π² случаС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π–Π°Π½Π½ΠΎ Π·Π° счСт использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…), я Π±Ρ‹ использовал

 Dim rng ΠΊΠ°ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½
Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ rng = Range("ΠŸΡ€ΠΈΠ²Π΅Ρ‚")
Dim myArray() ΠΊΠ°ΠΊ Double, X ΠΊΠ°ΠΊ Long, N ΠΊΠ°ΠΊ Long
Π₯ = 0
N = WorksheetFunction.CountIf(rng, "<>")
ReDim ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΉ массив (X)
Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ячСйки Π² rng
    Если ячСйка <> "" И X < N Π’ΠΎΠ³Π΄Π°
        myArray(X) = ячСйка.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
        Π₯ = Π₯ + 1
        Если X < N, Ρ‚ΠΎ ReDim сохранит myArray (ΠΎΡ‚ 0 Π΄ΠΎ X)
    ΠšΠΎΠ½Π΅Ρ†, Ссли
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ
 

1

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠ»ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² систСму

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Google

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· Facebook

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΎΡΡ‚ΡŒ

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

ВрСбуСтся, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ отобраТаСтся

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΎΡΡ‚ΡŒ

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

ВрСбуСтся, Π½ΠΎ Π½Π΅ отобраТаСтся

НаТимая Β«ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ свой ΠΎΡ‚Π²Π΅Ρ‚Β», Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ с нашими условиями обслуТивания ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΈ поняли Π½Π°ΡˆΡƒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ кодСкс повСдСния.

vba β€” динамичСский массив динамичСских массивов

Π—Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопрос

спросил

ИзмСнСно
7 Π»Π΅Ρ‚, 6 мСсяцСв Π½Π°Π·Π°Π΄

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ
408 Ρ€Π°Π·

Π― Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

МнС Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ динамичСских массивов ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

 Dim list1 () ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
Dim list2() ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
Dim list3() ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
...
Dim listN() ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
 

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ список прСдставляСт собой ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, я Π½Π΅ знаю, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ "N" Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π― Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эти списки "N" динамичСскими. Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ динамичСскиС массивы. Но ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β«redimΒ» Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π° измСрСния Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’ частности, я дСлаю это:

 Dim BigList() ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
...
Redim BigList(listNum, listLength)
 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ/ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ "list1", "list2" , "list3"..., Π²Ρ‹Π·ΠΎΠ² "BigList(1)", "BigList(2)" Π΄Π°Π΅Ρ‚ ΠΌΠ½Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’ частности, Π³Π΄Π΅-Ρ‚ΠΎ Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ эта Ρ‡Π°ΡΡ‚ΡŒ:

 sub ProcessList (byref listToProcess() ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚)
...
ΠΊΠΎΠ½Π΅Ρ† суб
суб основной ()
...
Π²Ρ‹Π·ΠΎΠ² списка процСссов (список1)
Π²Ρ‹Π·ΠΎΠ² списка процСссов (список2)
...
Π²Ρ‹Π·ΠΎΠ² списка процСссов (списокN)
ΠΊΠΎΠ½Π΅Ρ† суб
Π’Π΅ΠΏΠ΅Ρ€ΡŒ я ΠΌΠΎΠ³Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»:
для i = ΠΎΡ‚ 1 Π΄ΠΎ N
    Π’Ρ‹Π·ΠΎΠ² ProcessList(список "i")
ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ я
 

Для этого трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ list"i" Π±Ρ‹Π» ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ динамичСским массивом. Π˜Ρ‚Π°ΠΊ, послС redim BigList(listNum,listLength) ΠΈ я дСлаю это:

 для i = 1 до N
    Call ProcessList(BigList(i)) 'я ΡΡΡ‹Π»Π°ΡŽΡΡŒ Π½Π° listNum
ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ я
 

Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΌΠ½Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ "НСсовмСстимый Ρ‚ΠΈΠΏ".

  • массивы
  • vba

8

Π’ΠΎΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² создания словаря , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит цСлочислСнныС значСния (Ρ‚. Π΅. N ) ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ являСтся пустым массивом.

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ExtendList для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° этих пустых массивов ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

 Sub foo()
Dim BigList ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
Dim N As Long
Dim v ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
'Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ словаря
УстановитС BigList = CreateObject("Scripting.Dictionary")
'Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ N пустых массивов:
Н = 3
Для i = 1 Π΄ΠΎ N
    Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ список (я) = Массив ()
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ
'Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· элСмСнтов Π² вашСм BigList
Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ список (2) = Π Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ список (большой список (2), 1, 10)
v = BigList(2) 'Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ v Π² ΠΎΠΊΠ½Π΅ Locals ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1 x 10
ΠšΠΎΠ½Π΅Ρ† сабвуфСра
Ѐункция ExtendList(lst, a As Long, b As Long)
    ReDim lst(a, b)
    Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ список = список
ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ функция
 

ΠŸΡ€ΠΈ рассмотрСнии вашСго ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ вопроса я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ просто Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ поняли, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ReDim :

 Redim BigList(listNum, listLength)
 

Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ BigList Π½Π° основС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² listNum ΠΈ listLength . Он Π΄Π΅Π»Π°Π΅Ρ‚ , Π° Π½Π΅ (ΠΊΠ°ΠΊ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ), создаСт список массивов Π²Π½ΡƒΡ‚Ρ€ΠΈ BigList .

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ, ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ массивы ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ индСкс):

 ReDim Preserve BigList(listNum)
Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ список (Π½ΠΎΠΌΠ΅Ρ€ списка) = Массив ()
ReDim BigList (listNum) (listSize)
 

2

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠ»ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² систСму

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Google

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· Facebook

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΎΡΡ‚ΡŒ

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

ВрСбуСтся, Π½ΠΎ Π½Π΅ отобраТаСтся

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΎΡΡ‚ΡŒ

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

ВрСбуСтся, Π½ΠΎ Π½Π΅ отобраТаСтся

НаТимая Β«ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ свой ΠΎΡ‚Π²Π΅Ρ‚Β», Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ с нашими условиями обслуТивания ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΈ поняли Π½Π°ΡˆΡƒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ кодСкс повСдСния.