182 Aufrufe
Gefragt in Tabellenkalkulation von nighty Experte (6.6k Punkte)

Hallo Community

Redim Preserve bei einem Zweidimensionalen Array

Wir nutzen die Eigenschaft von Vba das sich die letzte Dimension  neu Initialisien läßt(mit der Option Preserve) 

Ein Modul zur Veranschaulichung mit Aufruf der Funktion!

Sub ArrayPreserve()
Dim Dat As Variant
Dat = Range("A1:A3")  'Array 1 to 3,1 to 1 Initialisiert 
Dat = ArrayRedim(Dat)  'Array 1 to 4,1 to 1 neu Initialisiert mit der Option Preserve
'Verkuezung,in der Funktion +1 gegen -1 Tauschen,auf Null unterschreitung achten.
End Sub


Function ArrayRedim(Darr As Variant) As Variant
    Darr = Application.WorksheetFunction.Transpose(Darr)
    ReDim Preserve Darr(LBound(Darr) To UBound(Darr) + 1)
    ArrayRedim = Application.WorksheetFunction.Transpose(Darr)
End Function
 

Um größere als zwei Dimensionen zu bearbeiten brauchen wir die Anzahl der Dimensionen.

Das geht mit folgender Funktion!

32 Dimensionen sind soweit ich weiß das Limit!

Function DimAnz(Darr As Variant) As Integer
Dim DimIndex As Integer, Anzahl As Integer
On Error GoTo Ende
 For DimIndex = 1 To 32
  Anzahl = UBound(Darr , DimIndex)
 Next DimIndex
Ende:
DimAnz = DimIndex - 1
End Function

Mit der Anzahl der Dimensionen liesse sich dann über eine Schleife die betroffene Dimension zum Ende schieben um sie neu zu Initialisiert,wieder über eine Schleife an ihre ursprüngliche Position gesetzt ! 

Viel spaß! 

Gruß Nighty

Deine Antwort

Dein angezeigter Name (optional):
Datenschutz: Deine Email-Adresse benutzen wir ausschließlich, um dir Benachrichtigungen zu schicken. Es gilt unsere Datenschutzerklärung.
Anti-Spam-Captcha:
Bitte logge dich ein oder melde dich neu an, um das Anti-Spam-Captcha zu vermeiden.
...