Array-Variablen mit VBA in Microsoft Excel 2010

Inhaltsverzeichnis:

Anonim

Wie verwende ich Excel VBA-Array?

Sie können die Makros entweder im Visual Basic-Editor ausführen, indem Sie den Cursor im Makro platzieren 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 über den Visual Basic-Editor aus, indem Sie verwenden Debug > Schritt in (durch Drücken von F8) So können Sie ihnen bei der Arbeit zusehen. Anweisung Wenn sich die Entwicklerregisterkarte nicht in der Multifunktionsleiste befindet…

  • Öffnen Sie Excel.
  • Gehen Sie zum VBA-Editor (drücken Sie Alt + F11)
  • Gehen Sie zu Direktfenster. (Strg + G)
  • Schreiben Sie unten Code.
    • Application.ShowDevTools = True

So fügen Sie VBA-Code in Excel ein

  • Gehe zu Entwickler Registerkarte > Code Gruppe > Visual Basic
  • Klicken Einfügung > Modul.
  • Öffnet ein leeres Modul für Sie.
  • Schreiben / Einfügen des bereitgestellten Codes in dieses Modul

So führen Sie VBA-Code in Excel aus

  • Wählen Sie irgendwo zwischen dem Code, Unter… Ende Unter
  • Klicken Sie auf Ausführen & Abo ausführen oder F5

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 diese verwenden:

Code


Unter TestStaticArray()
' speichert 10 Namen in der Arbeitsmappe in der Array-Variable MyNames()
Dim MyNames(1 To 10) As String ' deklariert eine statische Array-Variable
Dim iCount As Integer
Für iCount = 1 To ThisWorkbook.Sheets.Count
MyNames(iCount) = ThisWorkbook.Sheets(iCount).Name
Debug.Print MyNames(iCount)
Nächster iCount
Erase MyNames() ' löscht den Variableninhalt, gibt Speicherplatz frei
End Sub

Dekodieren

Dim MyNames(1 bis 10) als String

Wir haben ein einzelnes veriable MyNames als String dimensionieren, das 10 Elemente enthalten kann. MyNames veriable ist also ein Array-Typ.

Dim iCount As Integer

Wir haben eine einzelne Variable iCount als Integer deklariert, die nur Wert vom Typ Numeric Integer aufnehmen kann

Für iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count gibt uns die Anzahl der Blätter in einer Arbeitsmappe. ThisWorkbook, bezieht sich auf die Arbeitsmappe, in der Code geschrieben wurde.

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

Mit einer Schleife weisen wir den Namen jedes Blatts einer einzelnen Veriable namens MyNames zu. MyNames ist ein veriabler Array-Typ, so dass jeder Blattname in jedem Array-Element gespeichert wird.

Debug.Print MyNames(iCount)

Unmittelbar nach der Zuweisung des Werts zu jedem Element eines Arrays wird derselbe in ImmediateWindow standardmäßig unten im VBA-Fenster gedruckt. Sie können die Zuweisung jedes Werts anzeigen und seinen Wert in ImmediateWindow anzeigen.

Nächster iCount

Next wird verwendet, um For Loop in Excel VBA anzuweisen, dieselbe Aufgabe erneut zu wiederholen, indem der iCount-Zähler erhöht wird, bis iCount die Gesamtzahl der Blätter in der Arbeitsmappe 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 genau wie eine statische Array-Variable, außer dass Sie keine Informationen über die Array-Größe angeben.

Im obigen Beispiel (Dim MyNames(1 bis 10) als String) Wenn die Anzahl der Blätter größer als 10 ist, wird ein Fehler angezeigt, da MyNames nicht mehr als 10 Artikel speichern kann.

Code

Unter TestDynamicArray()
' speichert alle Namen in der Arbeitsmappe in der Array-Variable MyNames()
Dim MyNames() As String ' deklariert eine dynamische Array-Variable
Dim iCount As Integer
Dim Max als Integer
Max = ThisWorkbook.Sheets.Count ' findet die maximale Array-Größe
ReDim MyNames(1 To Max) ' deklariert die Array-Variable mit der erforderlichen Größe
Für iCount = 1 bis Max
MyNames(iCount) = ThisWorkbook.Sheets(iCount).Name
MsgBox MyNames(iCount)
Nächster iCount
Erase MyNames() ' löscht den Inhalt der Variablen, gibt Speicherplatz frei
End Sub

Dekodieren

Dim MyNames() As String

Wir haben einen einzelnen veriablen MyNames als String, der ein Array-Typ ist, dimensionieren, da die Klammer nach dem veriablen Namen geöffnet und geschlossen wird, aber keine Daten darin speichern können, da wir seinen UpperLevel nicht bereitstellen.

ReDim MyNames(1 bis max.)

Redim wird verwendet, um das Array neu zu dimensionieren. Es weist nun die obere Ebene des Array Type Veriable zu.

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, diesmal drucken wir den Wert in einer MessageBox, die so aussieht…

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 den 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, nutzen Sie den Speicher effizienter.

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 a . verwenden ReDim-Anweisung, die Größe der Array-Variablen zu ändern, wird der Variableninhalt auch gelöscht, um zu vermeiden, dass der Variableninhalt gelöscht wird, wenn Sie Redim die Array-Variable, die Sie verwenden müssen ReDim Preserve-Stellungnahme.

Code

Sub GetFileNameList()
' speichert alle Dateinamen im aktuellen Ordner
Dim FolderFiles() As String ' deklariert eine dynamische Array-Variable
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir("D:\Test\*.*")
Während tmp leer
fCount = fCount + 1
ReDim Preserve FolderFiles(1 bis fCount)
' deklariert die Array-Variable erneut (Größe+1)
FolderFiles(fCount) = tmp
tmp = Dir
Wende
MsgBox fCount & " Dateinamen befinden sich im Ordner " & CurDir
Erase FolderFiles ' löscht den Inhalt der Variablen, gibt Speicherplatz frei
End Sub

Dekodieren

Dim FolderFiles() As String

Wir haben ein einzelnes veriable FolderFiles als String, das ein Array-Typ ist, dimensionieren, da Paranthesis nach dem veriablen Namen geöffnet und geschlossen wird, aber keine Daten darin speichern können, da wir seinen UpperLevel nicht bereitstellen.

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

Der Befehl Dir funktioniert als Explorer, der die 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.

Während tmp leer

Anstelle der For-Schleife in Excel VBA wiederholen wir diesmal dieselbe Aktion mit Excel VBA WHILE LOOP, bei der das Kriterium zum Beenden der Schleife als tmp ungleich leer festgelegt wurde. Solange also kein Wert in tmp veriable vorhanden ist, funktioniert die Schleife.

ReDim Preserve FolderFiles(1 bis fCount)

Array veriable FolderFiles haben keine obere Ebene an der Startposition. Aber bei jeder Wiederholung wird es seine obere Ebene durch den ReDim-Befehl erhöhen. Im ersten Durchlauf 1, dann 2… und so weiter, bis fCount. Mit jedem Erhöhen der oberen Ebene werden jedoch alle bereits zugewiesenen Variablen verloren. Mit dem Befehl Preserve können wir den bereits zugewiesenen Wert halten oder speichern.

Wende

Wend hat For-Schleifen in VBA angewiesen, dieselbe Aufgabe noch einmal zu wiederholen, bis die Kriterien erfüllt sind.

MsgBox fCount & " Dateinamen befinden sich im Ordner " & CurDir

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