Datenfelder

Was ist ein Datenfeld?

Ein Datenfeld (engl. Array) kann man sich als eine Gruppe von Variablen vorstellen, die alle unter demselben Namen gespeichert  werden und denselben Datentypen haben. Ein Datenfeld kann Text, Zahlen oder Objekte speichern. Die Elemente des Datenfeldes werden über einen Index angesprochen.

Datenfelder können eindimensional, zweidimensional oder mehrdimensional sein.

Eindimensionale Datenfelder

Deklaration:

Die Deklaration einer Variable als eindimensionales Datenfeld erfolgt über  Klammern hinter dem Namen der Variable. In die Klammer wird die gewünschte Anzahl der Elemente des Datenfeldes geschrieben.
Beispiel:
Dim arrWochentag(1 To 7) As String

Man kann die Untergrenze für das Datenfeld weglassen und nur die Anzahl der Elemente angeben, die das Datenfeld aufnehmen soll:
Beispiel:
Dim arrWochentag(7) As String
In diesem Fall verwendet VBA den voreingestellten Index 0 als Untergrenze. Das Datenfeld enthät daher 8 Elemente.

Ein Datenfeld Element wird mit dem Element Index in runden Klammern angesprochen, z. B.
arrWochentag(2)

Beispiel:
Im Beispiel Programm „Sub Datenfeld()“ entspricht der Index des Datenfeldes dem Wochentag. Das Datenfeld wird mit einer For…Next-Schleife ausgegeben, in der alle Indizes des Datenfeldes durchlaufen werden.

Sub Datenfeld()
Dim arrWochentag(1 To 7) As String
Dim Index As Integer
' Datenfeld befüllen
arrWochentag(1) = "Montag"
arrWochentag(2) = "Dienstag"
arrWochentag(3) = "Mittwoch"
arrWochentag(4) = "Donnerstag"
arrWochentag(5) = "Freitag"
arrWochentag(6) = "Samstag"
arrWochentag(7) = "Sonntag"
' Datenfeld ausgeben
For Index = 1 To 7
    Debug.Print arrWochentag(Index)
Next Index
End Sub

Mehrdimensionale Datenfelder

Datenfelder können bis zu 60 Dimensionen beinhalten. In der Praxis werden selten mehr als drei Dimensionen verwendet.

Deklaration eines mehrdimenstionalen Datenfeldes:
In der Deklaration eines zweidimensionalen Datenfeldes wird eine zweite Bereichsangabe innerhalb der Klammern benötigt.
Beispiel:
    Dim arrMatrix(1 To 3, 1 To 2) As String
Die Bedeutung ist wie folgt:
– 1 To 3: deklariert die erste Dimension, die Anzahl Zeilen in der Matrix.
– 1 To 2: deklariert die zweite Dimension, die Anzahl der Spalten in der Matrix

Sub ZweidimensionalesDatenfeld()
Dim arrMatrix(1 To 3, 1 To 2) As Integer
Dim i As Integer, j As Integer
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
arrMatrix(1, 1) = 10
arrMatrix(1, 2) = 10
arrMatrix(2, 1) = 20
arrMatrix(2, 2) = 20
arrMatrix(3, 1) = 30
arrMatrix(3, 2) = 30
For i = 1 To 3
    For j = 1 To 2
        ' Schreibt die Datenfeld Elemente in das Tabellenblatt
        ws.Cells(i, j).Value = arrMatrix(i, j)
    Next j
Next i
Set ws = Nothing
End Sub

LBound und UBound

Mit den Funktionen LBound und UBound können die Unter- und Obergrenzen eines Datenfeldes von einem VBA Programm ermittelt werden.

Sub Datenfeld_LBound_Ubound()
Dim arrWochentag(1 To 7) As String
Dim Index As Integer
' Datenfeld befüllen
arrWochentag(1) = "Montag"
arrWochentag(2) = "Dienstag"
arrWochentag(3) = "Mittwoch"
arrWochentag(4) = "Donnerstag"
arrWochentag(5) = "Freitag"
arrWochentag(6) = "Samstag"
arrWochentag(7) = "Sonntag"
' Unter und Obergrenze des Datenfelds ausgeben
Debug.Print LBound(arrWochentag), UBound(arrWochentag)
End Sub

 

Dynamische Datenfelder

Man kann ein dynamisches Datenfeld verwenden, wenn zum Zeitpunkt der Deklaration des Datenfelds noch nicht bekannt ist, wie viele Elemente das Datenfeld enthalten soll.

Deklaration:
Die Klammer nach dem Variablennamen bleibt leer.
Beispiel
Dim arrWochentag() as string
Zu diesem Zeitpunkt enthält das Datenfeld noch keine Elemente. Die Elemente des Datenfeldes werden erst durch die Anweisung ReDim angelegt. Diese Anweisung setzt Größe des Datenfelds auf die gewünschte Größe.
Beispiel
ReDim arrWochentag(1 To 7)
Der Befehl ReDim kann in einem Code mehrfach verwendet werden. In diesem Fall kann das Datenfeld Elemente und gesetzte Werte enthalten. Durch den ReDim Befeld verliert das Datenfeld seinen Inhalt und die gesetzten Werte werden gelöscht. Dies kann man durch den Befehl „ReDim Preserve“ vermeiden.
Beispiel
ReDim Preserve arrWochentag(1 To 7)

Anwendung von Datenfeldern

Ich habe in meiner Praxis Datenfelder sehr häufig verwendet. Man kann beispielsweise den Inhalt der Zellen in einem Excel Tabellenblatt auslesen und für die weitere Verarbeitung in einem Datenfeld speichern. Nach der Verarbeitung der Daten kann man den Inhalt des Datenfeldes in ein Excel Tabellenblatt schreiben.

Sub Datenfeld_Tabellenblatt()
Dim arrWochentag(1 To 7) As String
Dim Index As Integer
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
' Datenfeld befüllen
arrWochentag(1) = "Montag"
arrWochentag(2) = "Dienstag"
arrWochentag(3) = "Mittwoch"
arrWochentag(4) = "Donnerstag"
arrWochentag(5) = "Freitag"
arrWochentag(6) = "Samstag"
arrWochentag(7) = "Sonntag"
' Datenfeld in das Tabelleblatt Tabelle1 schreiben
For Index = 1 To 7
    ws.Cells(Index, 1).Value = arrWochentag(Index)
Next Index
Set ws = Nothing
End Sub

VBA-Funktion „Array()“

Gibt einen Wert vom Typ Variant zurück, der ein Datenfeld enthält.

Syntax
Array(arglist)
Das arglist-Argument ist eine durch Trennzeichen getrennte Liste von Werten, die den Elementen des Arrays zugewiesen werden. Der Index des Array beginnt normalerweise mit 0.

Beispiel:

Sub Test_Array_Function()
Dim A As Variant, B As Integer
A = Array(1, 2, 3)
B = A(2)
Debug.Print B
End Sub

Schreibe einen Kommentar