VBA ReDim | Dünaamiliste massiivide käsitsemine VBA ReDim Preserve abil

Exceli VBA ReDimi avaldus

VBA Redim lause on sarnane hämarale avaldusele, kuid erinevus seisneb selles, et seda kasutatakse suurema salvestusruumi salvestamiseks või eraldamiseks või muutuja või massiivi salvestusruumi vähendamiseks. Nüüd on avaldisega kaks olulist aspekti Säilita, kui selle lause juures kasutatakse säilivust, siis loob see uue erineva suurusega massiivi ja kui säilitusega seda lauset ei kasutata, muudab see lihtsalt praeguse muutuja massiivi suurust.

Massiivid on VBA kodeerimise oluline osa. Massiivide abil saame samasse meie määratletud muutujasse salvestada rohkem kui ühe väärtuse. Nagu ka see, kuidas me deklareerime muutuja sõna Dim kasutades, peame ka massiivi nime deklareerima, kasutades ka Dim-d.

Massiivi nime deklareerimiseks peame kõigepealt tuvastama massiivi tüübi, mille me määratleme. Massiivides on meil 5 tüüpi.

  1. Staatiline massiiv
  2. Dünaamiline massiiv
  3. Ühemõõtmeline massiiv
  4. Kahemõõtmeline massiiv
  5. Mitmemõõtmeline massiiv

Staatilises massiivis excelis otsustame muutuja deklareerimise korral massiivi alumise ja ülemise väärtuse aegsasti ette. Näiteks vaadake allpool toodud näidet.

Kood:

 Sub ReDim_Example1 () Dim MyArray (1 kuni 5) String End Sub 

Siin on MyArray massiivi nimi, mille väärtus võib olla vahemikus 1 kuni 5. MyArray mahutab selles 5 erinevat tulemust nagu allpool.

Kood:

 Sub ReDim_Example1 () Dim MyArray (1 kuni 5) stringina MyArray (1) = "Tere" MyArray (2) = "Hea" MyArray (3) = "Hommik" MyArray (4) = "Kas teil on" MyArray (5) " = "Tore päev" Lõppsub 

Dünaamiline massiiv koos ReDimi avaldusega

Kuid dünaamilise massiivi puhul see nii ei ole, me ei otsusta alumist ja ülemist väärtust aegsasti ette, vaid määrame lihtsalt massiivi nime ja määrame andmetüübi.

 Sub ReDim_Example1 () Dim MyArray () String End Sub 

Massiivinime muutmiseks dünaamiliseks peame selle deklareerima kõigepealt sõnaga „Hämar”, kuid ärge otsustage massiivi suurust aegsasti. Nimetame lihtsalt sulgudes tühjade väärtustega massiivi (). Kui massiiv ei sisalda suurust, käsitletakse seda dünaamilise massiivina.

Dim MyArray () stringina

Sel hetkel, kui mainite sulgudes oleva massiivi suurust, muutub see staatiliseks massiiviks. Dim MyArray (1 kuni 5) stringina

Dünaamilises massiivis muudame massiivi suurust alati, kasutades koodi järgmisel real sõna “ReDim”.

ReDim MyArray (1 kuni 6) stringina

Kõik väärtused, mis on eelmiste sammude korral massiivi nimele salvestatud, st kasutades käsku „Dim“, on null ja suurusest, mille deklareerisime „ReDim“ abil, saab massiivi uueks suuruseks.

Näited VBA redimendi kasutamise kohta

Selle VBA ReDim Exceli malli saate alla laadida siit - VBA ReDim Exceli mall

Näide 1

Heitke pilk avalduse “ReDim” praktilisele kasutamisele. ReDimi rakendamiseks toimige järgmiselt.

1. samm: kõigepealt looge makro nimi.

2. samm: kuulutage massiivi nimi stringina.

Kood:

 Sub ReDim_Example1 () Dim MyArray () String End Sub 

3. samm: kasutage nüüd sõna „Redim” ja määrake massiivi suurus.

Kood:

 Sub ReDim_Example1 () Dim MyArray () Stringina ReDim MyArray (1 kuni 3) End Sub 

Samm 4: Nii et massiivi nimi "MyArray" mahutab siin kuni 3 väärtust. Määrake väärtus nendele 3 massiivile nagu allpool.

Kood:

 Sub ReDim_Example1 () Dim MyArray () stringina ReDim MyArray (1 kuni 3) MyArray (1) = "Tere tulemast" MyArray (2) = "" MyArray (3) = "VBA" lõpp-alam 

Esimene massiiv on võrdne sõnaga “Welcome”, teine ​​massiiv on võrdne sõnaga “to” ja kolmas massiiv on võrdne sõnaga “VBA”.

5. samm: nüüd salvestage need massiivi väärtused lahtritesse.

Kood:

 Sub ReDim_Example1 () Dim MyArray () stringina ReDim MyArray (1 kuni 3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" Range ("A1"). Väärtus = MyArray (1) vahemik ("B1"). Väärtus = MyArray (2) Range ("C1"). Väärtus = MyArray (3) End Sub 

6. samm: kui käivitate selle koodi, peaksid need väärtused olema vastavalt lahtrites A1, B1 ja C1.

Näide # 2 - muutke massiivi suurust, kui mäletate vanu väärtusi.

Kui massiivi nimele on määratud väärtused, saame ka protseduuri mis tahes ajahetkel suurust muuta, kasutades sõna “ReDim Preserve”.

Oletame, et olete massiivi nime juba deklareerinud ja määranud neile massiivi nimele väärtused nagu allpool.

Nüüd soovite massiivi pikkust suurendada 2 ehk 5 võrra. Sellisel juhul võime massiivi pikkuse suuruse muutmiseks kasutada sõna VBA “ReDim Preserve”, et ka vanad väärtused meelde jätta.

Kood:

 Sub ReDim_Example2 () Dim MyArray () stringina ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Märk 1" Vahemik ("A1"). Väärtus = MyArray (1) Range ("B1"). Väärtus = MyArray (2) Range ("C1"). Väärtus = MyArray (3) Range ("D1"). Väärtus = MyArray (4) End Sub 

Nüüd saame massiivile määrata veel kaks väärtust.

Kood:

 Sub ReDim_Example2 () Dim MyArray () stringina ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Märk 1" Vahemik ("A1"). Väärtus = MyArray (1) Range ("B1"). Väärtus = MyArray (2) Range ("C1"). Väärtus = MyArray (3) Range ("D1"). Väärtus = MyArray (4) End Sub 

Nüüd salvestage need väärtused lahtritesse.

Kood:

 Sub ReDim_Example2 () Dim MyArray () stringina ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Märk 1" Vahemik ("A1"). Väärtus = MyArray (1) Range ("B1"). Väärtus = MyArray (2) Range ("C1"). Väärtus = MyArray (3) Range ("D1"). Väärtus = MyArray (4) End Sub 

Nüüd käivitage makro ja vaadake, mis juhtub

Nii saime uue sõna lahtrisse D1.

Põhjus, miks peame kasutama sõna „säilitada“, kuna massiiv peaks protseduuris meeles pidama vanu massiivi väärtusi.

Praegu, kui te ignoreerite sõna “säilita”, ei mäleta see vanu väärtusi.

Siinkohal meenutavad asjad

  • ReDim mahutab ainult massiivi viimase väärtuse, mitte palju väärtusi. Näiteks ei saa me kasutada seda koodi “ReDim Preserve MyArray (4–5)”, see viskab vea.
  • Me ei saa staatilisi massiive ReDimi muuta. Hetkel, kui määrate sulgudes oleva massiivi suuruse, muutub see staatiliseks massiiviks.
  • ReDimi kasutades ei saa me andmetüüpi muuta. Massiiv võib mahutada mis tahes andmetüübi, mille oleme massiivi deklareerimisel omistanud.