Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1520to1524
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ReDim Preserve eines 2D Arrays

ReDim Preserve eines 2D Arrays
18.10.2016 08:54:48
baschti007
Halli Hallo
Ich habe einen Bereich in A1:B10 in A1 befinden sich leere Zellen , dieses Spalte soll somit nicht in das Array so weit so gut .
Nur definiere ich das Array mit ReDim Preserve auf die Anzahl die in das Array gekommen sind nur leider funktioniert das mit dem 2D Array nicht , wenn ich nur 1D Array habe läuft es .
Fehler : Index Außerhalb des gültigen Bereiches
Gruß Basti
Option Explicit
Sub DoIT()
Dim x As Long, c As Long
Dim lngCount As Long
Dim myArray As Variant
Dim tmp()
myArray = Range("A1:B10")
ReDim tmp(1 To UBound(myArray, 1), 1 To UBound(myArray, 2))
For x = LBound(myArray, 1) To UBound(myArray, 1)
If myArray(x, 1)  "" Then
lngCount = lngCount + 1
For c = LBound(myArray, 2) To UBound(myArray, 2)
tmp(lngCount, c) = myArray(x, c)
Next
End If
Next
ReDim Preserve tmp(1 To lngCount, 1 To UBound(myArray, 2))
For x = 1 To UBound(tmp, 1)
For c = 1 To UBound(tmp, 2)
Cells(x, c + 4) = tmp(x, c)
Next
Next
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ReDim Preserve eines 2D Arrays
18.10.2016 09:38:23
EtoPHG
Hallo Baschti,
Ich glaube das ist nicht das erste Mal, dass ich sage: Zuerst mal die XL-VBA Hilfe konsultieren!
Das steht:
Preserve Optional.
Schlüsselwort, das zum Erhalt der Daten in einem bestehenden Datenfeld verwendet wird,
wenn die Größe der letzten Dimension geändert wird. 
heisst im Klartext,ein Preserve kann nicht angewendet werden um kleinere Dimensionen, wie die letzte, zu ändern!
Gruess Hansueli
AW: ReDim Preserve eines 2D Arrays
18.10.2016 10:00:10
Luschi
Hallo Basti,
ein Blick in die Vba-Hilfe (F1-Taste würde Dein Problem sofort beantworten:

Wenn Sie das Preserve-Schlüsselwort verwenden, können Sie lediglich die Größe
der letzten Array-Dimension ändern, die Anzahl der Dimensionen ist nicht veränderbar.
Wenn Ihr Array beispielsweise nur über eine Dimension verfügt, können Sie die Größe
dieser Dimension ändern, da sie die letzte und einzige Dimension ist.
Wenn Ihr Array jedoch zwei oder mehr Dimensionen hat, können Sie nur die Größe
der letzten Dimension ändern und den Inhalt des Arrays dennoch beibehalten.
Das folgende Beispiel zeigt, wie Sie die letzte Dimension vergrößern können,
ohne dabei bestehende Daten im Array zu löschen.

Diese Regel gilt auch in VB6, VB.Net, C# usw.
Gruß von Luschi
aus klein-Paris
PS: Vielleicht denkst Du mal über die Worte meines Vorredners nach - nicht nur immer Hilfe schreien, sondern sich selbst informieren /F1-Taste, Google, Fchbuch u.u.u.
Anzeige
AW: ReDim Preserve eines 2D Arrays
18.10.2016 10:16:50
baschti007
Und dazu nicht immer gleich Hilfe zu Schrein !!
Ich Denke nicht, das ich immer gleich Hilfe schrei und Googlen Tuh ich eh nur wenn man sich damit nun 30 min beschäftigt hat und zu keiner Lösung kommt (Man sieht den Walt vor lauter Bäumen nicht) kann man wohl fragen dafür ist doch solch ein Forum da =D .
Und ich selber versuche ja auch hier zu Helfen soweit wie es mir möglich ist.
Gruß Basti
AW: ReDim Preserve eines 2D Arrays
18.10.2016 10:11:41
baschti007
Danke euch beiden =D
Ihr habt es schon nicht leicht mit mir ;)
Gruß Basti
Lösung = ReDim Preserve eines 2D Arrays
18.10.2016 10:28:52
baschti007
Hier meine Lösung =)

Option Base 1
Sub DoIT()
Dim x As Long, c As Long
Dim lngCount As Long
Dim myArray As Variant
Dim tmp()
myArray = Range("A1:B10")
ReDim tmp(1 To UBound(myArray, 2), 1 To UBound(myArray, 1))
For x = LBound(myArray, 1) To UBound(myArray, 1)
If myArray(x, 1)  "" Then
lngCount = lngCount + 1
For c = LBound(myArray, 2) To UBound(myArray, 2)
tmp(c, lngCount) = myArray(x, c)
Next
End If
Next
ReDim Preserve tmp(1 To UBound(myArray, 2), 1 To lngCount)
For x = 1 To UBound(tmp, 2)
For c = 1 To UBound(tmp, 1)
Cells(x, c + 4) = tmp(c, x)
Next
Next
End Sub

Anzeige
AW: ReDim Preserve eines 2D Arrays
18.10.2016 11:10:30
Daniel
Hi
Wie schon gesagt wurde, nur die letzte Dimension kann mit ReDim Preserve ohne Datenverlust verändert werden.
Wenn die erste Dimension redimmt werden muss, dann kann man bei einem 2D-Array mit Worksheetfunction.Transpose die Dimensionen tauschen.
arr = worksheetfunction.Transpose(arr)
Redim Preserve arr(...)
arr = worksheetfunction.Transpose(arr)
Gruß Daniel
Bei 1dimensionalen Arrays in 1dimensionalen ...
18.10.2016 15:09:11
Luc:-?
Arrays ist das ReDimmen problemlos auf allen Ebenen möglich, Bastian! ;-]
Gruß, Luc :-?
Besser informiert mit …
Anzeige

39 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige