Matrix per VBA generisch auslesen

Häufig gibt es (bei mir) die Anforderung, dass ich im Excel eine mehrspaltige Tabelle habe, aus der ich einen dynamischen Durchlauf durch die Einträge der Tabelle generieren möchte. Ich löse dies mit dem Einlesen der Tabelle in eine Matrix und dem anschließenden Durchlauf.

 

Hier ist ein Beispiel, mit dem eine mehrspaltige Tabelle auf Tabellenblatt „Tabelle1“,
die ab Spalte 3 und mit einer Überschrift in Zeile 1 beginnt, eingelesen und
hier die zweite Spalte pro Schleifendurchlauf in einer Messagebox ausgegeben wird:

 

Sub schleife()
arReporting = readMatrix("Tabelle1", 1, 3)  'Tabellenblatt, Zeile, Spalte)
For i = 2 To UBound(arReporting, 1)
    MsgBox (arReporting(i, 2))
Next i
End Sub
Dies ist die Funktion, die in den VBA Code kopiert werden kann und dynamisch eine Tabelle einliest und in einer Matrix abspeichert.
Function readMatrix(Page As String, RowStart As Integer, ColumnStart As Integer)
Dim startRow, startColumn As Integer
Dim intZeile, intEndeZeile, intSpalte, intEndeSpalten As Long
Dim varValue, varÜberschrift As String
Dim Matrix() As String

varÜberschrift = "-"
Dim varID As String
varID = "-"
Dim intAnzahlSpalten As Long
intAnzahlSpalten = -1
Dim intAnzahlZeilen As Long
intAnzahlZeilen = -1

Worksheets(Page).Select

startRow = RowStart
startColumn = ColumnStart

'Ermittlung der Anzahl von Spalten - prüft die gefüllten Überschriften
Do While varÜberschrift <> ""
varÜberschrift = Cells(startRow, startColumn).Value
startColumn = startColumn + 1
intAnzahlSpalten = intAnzahlSpalten + 1
Loop

startRow = RowStart
startColumn = ColumnStart
'Ermittlung der Anzahl von Zeilen - prüft die gefüllten Zellen in Spalte 1
Do While varID <> ""
varID = Cells(startRow, startColumn).Value
startRow = startRow + 1
intAnzahlZeilen = intAnzahlZeilen + 1
Loop

'Mit der folgenden, auskommentierten Zeile kann die Größe der Matrix ausgegeben werden
'MsgBox (intAnzahlSpalten & " Spalten und " & intAnzahlZeilen & " Zeilen")

'Definition der leeren Matrix
ReDim Matrix(1 To intAnzahlZeilen, 1 To intAnzahlSpalten)


intEndeZeile = intAnzahlZeilen + RowStart - 1
intEndeSpalten = intAnzahlSpalten + startColumn - 1

'Schleife zum Füllen der Matrix
iZeile = 1
For intZeile = RowStart To (intEndeZeile)  'Zeile für Zeile
    jSpalte = 1
    For intSpalte = startColumn To intEndeSpalten 'Spalte für Spalte
        varValue = Cells(intZeile, intSpalte).Value 'Lesen des Zellenwertes
        Matrix(iZeile, jSpalte) = varValue 'Übertragen des Wertes in die Matrix
        'MsgBox ("Zeile " & intZeile & " / Spalte " & intSpalte & " : " & varValue)
        jSpalte = jSpalte + 1
    Next intSpalte
    iZeile = iZeile + 1
Next intZeile

'Übertragen an den Übergabewert
readMatrix = Matrix

End Function