Variabile de matrice folosind VBA în Microsoft Excel 2010

Cuprins:

Anonim

Cum se folosește matricea VBA Excel?

Puteți rula macrocomenzile fie din Editorul Visual Basic plasând cursorul în macro și apăsând tasta F5, fie din Excel deschizând caseta de dialog Macros (ALT + F8) alegând macro-ul pentru a rula și făcând clic pe Executare. Cel mai bine este să rulați aceste macrocomenzi din Visual Basic Editor folosind Depanare> Pas în (prin apăsarea F8) astfel încât să le puteți urmări în timp ce funcționează. Instrucțiuni Dacă fila Dezvoltator nu se află în panglică …

  • Deschideți Excel.
  • Accesați Editorul VBA (apăsați Alt + F11)
  • Accesați fereastra imediată. (Ctrl + G)
  • Scrieți mai jos Cod.
    • Application.ShowDevTools = Adevărat

Cum se introduce codul VBA în Excel

  • Mergi la Dezvoltator Filă> Cod Grup> Visual Basic
  • Clic Introduce > Modul.
  • Va deschide un modul gol pentru dvs.
  • Scrieți / lipiți codul furnizat în modulul respectiv

Cum se execută codul VBA în Excel

  • Selectați oriunde între Cod, Sub … End Sub
  • Faceți clic pe Run & Rulați Sub sau F5

Variabile matrice statice

În loc să utilizați mai multe variabile unice pentru a stoca informații, puteți utiliza o variabilă matrice.

Când știți câte elemente trebuie să stocați în matrice, puteți utiliza o variabilă matricială statică ca aceasta:

Cod


Sub TestStaticArray ()
'stochează 10 nume în registrul de lucru în variabila matrice MyNames ()
Dim MyNames (1-10) As String 'declară o variabilă matrice statică
Dim iCount As Integer
Pentru iCount = 1 To ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Următorul iCount
Erase MyNames () 'șterge conținutul variabilei, eliberați o memorie
Sfârșitul Sub

Decodează

Dim MyNames (1-10) ca șir

Avem dimensiunea unui singur MyNames verificabil ca un șir, care poate conține 10 elemente în el. Deci MyNames verificabil este un tip Array.

Dim iCount As Integer

Am declarat o singură variabilă iCount ca număr întreg, care poate conține doar valoare de tip număr întreg

Pentru iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count ne va oferi numărul de foi dintr-un registru de lucru. ThisWorkbook, se referă la Workbook, în care a fost scris codul.

MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Nume

Folosind o buclă, atribuim numele fiecărei foi unei singure verificabile numite MyNames. MyNames este un tip Array verificabil, deci va stoca fiecare nume de coli în fiecare element al matricei.

Debug.Print MyNames (iCount)

Imediat după ce ați atribuit valoarea fiecărui element al unui tablou, acesta va imprima la fel în ImmediateWindow, implicit în partea de jos a ferestrei VBA. Puteți vizualiza atribuirea fiecărei valori și afișa valoarea acesteia în ImmediateWindow.

Următorul iCount

Următorul este folosit pentru a spune For Loop în Excel VBA, să repete aceeași sarcină din nou, prin creșterea contorului iCount, până când iCount a atins numărul total de foi, în registrul de lucru.

Variabile matrice dinamice

Variabilele din matrice dinamică sunt utile atunci când în prealabil nu știți câte elemente aveți nevoie pentru a stoca informații.

Declarați variabilele dinamice ale matricei la fel ca o variabilă matricială statică, cu excepția faptului că nu dați nicio informație despre dimensiunea matricei.

În exemplul de mai sus (Dim MyNames (1-10) ca șir) dacă Numărul de coli mai mare de 10, va trece printr-o eroare, deoarece MyNames nu va putea stoca mai mult de 10 articole.

Cod

Sub TestDynamicArray ()
'stochează toate numele în registrul de lucru în variabila matrice MyNames ()
Dim MyNames () As String 'declară o variabilă matrice dinamică
Dim iCount As Integer
Dim Max ca întreg
Max = ThisWorkbook.Sheets.Count 'găsește dimensiunea maximă a matricei
ReDim MyNames (1 To Max) 'declară variabila matricei cu dimensiunea necesară
Pentru iCount = 1 până la max
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Următorul iCount
Erase MyNames () 'șterge conținutul variabil, eliberați puțină memorie
Sfârșitul Sub

Decodează

Dim MyNames () Ca șir

Avem dimensiunea unui singur MyNames verificabil ca un șir, care este un tip Array, datorită deschiderii și închiderii Paranthesis, după numele verificabil, dar nu vom putea stoca date în acesta, deoarece nu am furnizat nivelul său superior.

ReDim MyNames (1 până la maxim)

Redim este folosit pentru a redimensiona matricea, va atribui acum nivelul superior al tipului de matrice Veriabil.

În acest caz, numărul total de foi din registrul de lucru (Max = ThisWorkbook.Sheets.Count)

MsgBox MyNames (iCount)

În ultimul exemplu, am imprimat valoarea în variabile în fereastra imediată, de data aceasta, tipărim valoarea într-un MessageBox, care va apărea astfel …

Dacă știți că veți avea nevoie de o variabilă matrice cu 1000 de articole, utilizați o variabilă statică. Dezavantajul este că veți utiliza memoria de câte 1000 de articole de fiecare dată, de asemenea, în cazurile în care stocați doar informații despre 10 articole. Dacă utilizați o variabilă matrice dinamică, veți utiliza memoria mai eficient.

Uneori nu este posibil să se calculeze cât de mare va trebui să fie variabila matrice. În aceste cazuri, dimensiunea variabilei matrice trebuie mărită după cum este necesar. Când utilizați un ReDim-declarație pentru a modifica dimensiunea variabilei matricei, conținutul variabilei este, de asemenea, șters pentru a evita ștergerea conținutului variabilei atunci când Redim variabila matrice pe care va trebui să o utilizați ReDim Preserve-afirmație.

Cod

Sub GetFileNameList ()
'stochează toate numele fișierelor în folderul curent
Dim FolderFiles () As String 'declară o variabilă matrice dinamică
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir ("D: \ Test \ *. *")
În timp ce tmp Gol
fCount = fCount + 1
ReDim Preserve FolderFiles (1 to fCount)
'declară din nou variabila matrice (dimensiune + 1)
FolderFiles (fCount) = tmp
tmp = Dir
Merge încet
MsgBox fCount & "numele fișierelor se găsesc în folderul" & CurDir
Erase FolderFiles 'șterge conținutul variabil, eliberează puțină memorie
Sfârșitul Sub

Decodează

Dim FolderFiles () Ca șir

Avem dimensiunea unui singur FolderFiles verificabil ca un șir, care este un tip Array, datorită deschiderii și închiderii Paranthesis, după numele verificabil, dar nu vom putea stoca date în acesta, deoarece nu am furnizat nivelul său superior.

tmp = Dir ("D: \ Test \ *. *")

Comanda Dir funcționează ca un explorator, care poate conține numele tuturor fișierelor și folderelor dintr-un director. Puteți limita toate fișierele și la anumite criterii specifice. Dir („D: \ Test \ *. Pdf”) se va limita la toate fișierele la numai fișiere PDF sau extensie.

În timp ce tmp Gol

În loc de buclă For în Excel VBA, de data aceasta, repetăm ​​aceeași acțiune, folosind Excel VBA WHILE LOOP, unde criteriile pentru a termina bucla au fost setate ca tmp care nu este egal cu gol. Deci, până când a existat vreo valoare în tmp verificabilă, bucla va funcționa.

ReDim Preserve FolderFiles (1 to fCount)

Arhiva FolderFiles verificabilă nu are nici un nivel superior în poziția de pornire. Dar, în fiecare repetare, își va crește nivelul superior prin comanda ReDim. În prima rundă 1, apoi 2 … și așa mai departe, până la fCount. Cu toate acestea, de fiecare dată când creșteți nivelul superior, va pierde toate variabilele deja atribuite. Prin utilizarea comenzii Conservare, putem reține sau stoca valoarea deja atribuită.

Merge încet

Wend obișnuia să spună For Loops în VBA, să repete aceeași sarcină din nou, până la îndeplinirea criteriilor.

MsgBox fCount & "numele fișierelor se găsesc în folderul" & CurDir

La fiecare repetare, fcout va crește cu +1, iar valoarea finală va fi numărul de fișiere găsite în acel director / folder. Comanda CurDir dă numele directorului curent. În acest caz „D: \ Test”