Wie verwende ich ein Excel VBA Array?

Sie können die Makros entweder im Visual Basic-Editor ausführen, indem Sie den Cursor in das Makro setzen und die Taste F5 drücken, oder in Excel, indem Sie das Dialogfeld Makros (ALT + F8) öffnen, das auszuführende Makro auswählen und auf Ausführen klicken. Führen Sie diese Makros am besten im Visual Basic-Editor aus, indem Sie Debug> Schritt in (durch Drücken von F8) verwenden, damit Sie sie während der Arbeit beobachten können. Anweisung Wenn sich die Registerkarte „Entwickler“ nicht in der Multifunktionsleiste befindet. Öffnen Sie Excel.

  • Gehen Sie zum VBA-Editor (drücken Sie Alt + F11)

  • Gehe zum Sofortfenster. (Strg + G)

  • Schreiben Sie unten Code.

Application.ShowDevTools = True

So fügen Sie VBA-Code in Excel ein

Gehen Sie zur Registerkarte Entwickler> Codegruppe> * Visual Basic

Klicken Sie auf Einfügen> * Modul.

  • Öffnet ein leeres Modul für Sie.

  • Schreiben / Einfügen des bereitgestellten Codes in dieses Modul

Untitled-1

So führen Sie VBA-Code in Excel aus

Wählen Sie eine beliebige Stelle zwischen dem Code, * Sub… End Sub

Klicken Sie auf Run & Run Sub * oder

F5

Untitled-1

Statische Array-Variablen Anstatt mehrere eindeutige Variablen zum Speichern von Informationen zu verwenden, können Sie eine Array-Variable verwenden.

Wenn Sie wissen, wie viele Elemente Sie im Array speichern müssen, können Sie eine statische Array-Variable wie die folgende verwenden:

Code Sub TestStaticArray () 'speichert 10 Namen in der Arbeitsmappe in der Array-Variablen MyNames () Dim MyNames (1 bis 10) As String' deklariert eine statische Array-Variable Dim iCount As Integer For iCount = 1 To ThisWorkbook. Sheets.Count MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name Debug.Print MyNames (iCount) Weiter iCount Erase MyNames () 'löscht den variablen Inhalt, gibt etwas Speicher frei End Sub ==== Decode

Dim MyNames (1 bis 10) As String

Wir haben die Dimension eines einzelnen verifizierbaren MyNames als String, der 10 Elemente enthalten kann. MyNames veriable ist also ein Array-Typ.

Dim iCount As Integer

Wir haben eine einzelne Variable iCount als Ganzzahl deklariert, die nur den Wert

vom Typ Numeric Integer enthalten kann === Für iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count gibt uns die Anzahl der Blätter in einer Arbeitsmappe.

Dieses Arbeitsbuch bezieht sich auf die Arbeitsmappe, in die Code geschrieben wurde.

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

Mithilfe einer Schleife weisen wir den Namen jedes Blattes einem einzelnen Verifizierbaren mit dem Namen MyNames zu. MyNames ist ein Array-Typ, der verifizierbar ist, sodass jeder Blattname in jedem Array-Element gespeichert wird.

Debug.Print MyNames (iCount)

Unmittelbar nach dem Zuweisen des Werts zu jedem Element eines Arrays wird derselbe in ImmediateWindow standardmäßig unten im VBA-Fenster gedruckt.

Sie können die Zuordnung jedes Werts anzeigen und den Wert in ImmediateWindow anzeigen.

Image

Nächster iCount

Als Nächstes wird For Loop in Excel VBA angewiesen, dieselbe Aufgabe erneut zu wiederholen, indem der iCount-Zähler in der Arbeitsmappe erhöht wird, bis iCount die Gesamtzahl der Blätter erreicht hat.

Dynamische Array-Variablen Dynamische Array-Variablen sind nützlich, wenn Sie im Voraus nicht wissen, über wie viele Elemente Sie Informationen speichern müssen.

Sie deklarieren dynamische Array-Variablen wie statische Array-Variablen, geben jedoch keine Informationen zur Array-Größe an.

Im obigen Beispiel (Dim MyNames (1 bis 10) As String) wird bei einer Anzahl von Blättern größer als 10 ein Fehler angezeigt, da MyNames nicht mehr als 10 Elemente speichern kann.

Code Sub TestDynamicArray () 'speichert alle Namen in der Arbeitsmappe in der Array-Variablen MyNames () Dim MyNames () As String' deklariert eine dynamische Array-Variable Dim iCount As Integer Dim Max As Integer Max = ThisWorkbook.Sheets. Count 'findet die maximale Arraygröße ReDim MyNames (1 To Max)' deklariert die Arrayvariable mit der erforderlichen Größe For iCount = 1 To Max MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name MsgBox MyNames (iCount) Weiter iCount Erase MyNames () 'löscht den variablen Inhalt und gibt Speicher frei. End Sub ==== Decode

Dim MyNames () As String

Wir haben die Dimensionierung eines einzelnen verifizierbaren MyNames als String, bei dem es sich aufgrund von open & close Paranthesis nach dem verifizierbaren Namen um einen Array-Typ handelt, der jedoch keine Daten darin speichern kann, da wir dessen UpperLevel nicht angegeben haben.

ReDim MyNames (1 To Max)

Redim wird verwendet, um das Array neu zu dimensionieren. Es wird nun die obere Ebene des Array-Typs Veriable zugewiesen.

In diesem Fall die Gesamtzahl der Blätter in der Arbeitsmappe (Max = ThisWorkbook.Sheets.Count)

===

MsgBox MyNames (iCount)

Im letzten Beispiel haben wir den Wert in Variablen im Direktfenster gedruckt. Dieses Mal drucken wir den Wert in einer MessageBox, die so aussieht.

Image

Wenn Sie wissen, dass Sie eine Array-Variable mit 1000 Elementen benötigen, verwenden Sie eine statische Variable. Der Nachteil ist, dass Sie jedes Mal Speicher für 1000 Elemente verwenden, auch in den Fällen, in denen Sie nur Informationen zu 10 Elementen speichern. Wenn Sie eine dynamische Array-Variable verwenden, wird der Speicher effizienter genutzt.

Manchmal ist es nicht möglich zu berechnen, wie groß die Array-Variable sein muss. In diesen Fällen muss die Größe der Array-Variablen nach Bedarf erhöht werden. Wenn Sie eine ReDim-Anweisung verwenden, um die Größe der Array-Variablen zu ändern, wird auch der Variableninhalt gelöscht, um zu vermeiden, dass der Variableninhalt gelöscht wird, wenn Sie die Array-Variable neu definieren. Sie müssen die ReDim Preserve-Anweisung verwenden.

Code Sub GetFileNameList () 'speichert alle Dateinamen im aktuellen Ordner Dim FolderFiles () As String' deklariert eine dynamische Arrayvariable Dim tmp As String, fCount As Integer fCount = 0 tmp = Dir (" D: \ Test \. ") Während tmp <> leer ist fCount = fCount + 1 ReDim Preserve FolderFiles (1 To fCount) 'deklariert die Array-Variable erneut (Größe + 1) FolderFiles (fCount) = tmp tmp = Dir Wend MsgBox fCount &" Dateinamen sind gefunden im Ordner "& CurDir Erase FolderFiles" löscht den variablen Inhalt, gibt etwas Speicher frei End Sub ==== Decode

Dim FolderFiles () As String

Wir haben eine einzelne verifizierbare FolderFiles als String dimensioniert. Dies ist ein Array-Typ, da Paranthesis nach dem verifizierbaren Namen geöffnet und geschlossen wird. Wir können jedoch keine Daten darin speichern, da wir die obere Ebene nicht angegeben haben.

tmp = Dir („D: \ Test \.“)

Der Befehl Dir fungiert als Explorer, der den Namen aller Dateien und Ordner in einem Verzeichnis enthalten kann. Sie können alle Dateien auch auf bestimmte Kriterien beschränken. Dir („D: \ Test \ *. Pdf“) beschränkt sich von allen Dateien auf nur PDF-Dateien oder -Erweiterungen.

While tmp <> Empty

Statt Für die Schleife in Excel VBA wiederholen wir dieses Mal dieselbe Aktion mit Excel VBA WHILE LOOP, wobei die Kriterien zum Beenden der Schleife als tmp ungleich leer festgelegt wurden. Bis also in tmp ein Wert vorhanden war, wird die Schleife ausgeführt Arbeit.

ReDim Preserve FolderFiles (1 To fCount)

Array-verifizierbare FolderFiles haben keine obere Ebene an der Startposition. Bei jeder Wiederholung wird dies jedoch der Fall sein Erhöhen Sie die obere Ebene mit dem Befehl ReDim. Führen Sie zuerst 1, dann 2 usw. aus, bis fCount. Mit jedem Erhöhen der oberen Ebene gehen jedoch alle bereits zugewiesenen Variablen verloren. Mit dem Befehl Preserve können wir oder halten Speichern Sie den bereits zugewiesenen Wert.

Wend

Wend wurde verwendet, um For Loops in VBA anzuweisen, dieselbe Aufgabe erneut zu wiederholen, bis die Kriterien erfüllt sind.

MsgBox fCount & „Dateinamen befinden sich im Ordner“ & CurDir

Bei jeder Wiederholung erhöht sich fcout mit +1 und der endgültige Wert gibt die Anzahl der Dateien an, die in diesem Verzeichnis / Ordner gefunden wurden. Der Befehl CurDir gibt den Namen des aktuellen Verzeichnisses an. In diesem Fall „D: \ Test“

Image