Clever-Excel-Forum

Normale Version: Teilbereich einer ArrayList umkehren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe Probleme mit Anwendung der Reverse - Methode für ArrayList-Objekte.  Schaut euch meinen unteren Code an. Hier werden die Werte

mittels Reverse-Funktion in der ArrayList umgekehrt. So weit so gut. Was mir aber Probleme bereitet ist folgendes. Ich möchte nur

einen Teilbereich  aus den gegebenen ArrayList Elementen umkehren. Sagen wir mal beispielhaft die Elemente von "Die" bis "Fr".

Wie mache ich das?

Code:
Sub ArrayList_Reverse_Teilbereich()
Dim i%, f: f = Array("Mo", "Die", "Mi", "Do", "Fr", "Sa", "So")
Dim arrList As Object
Set arrList = CreateObject("System.Collections.ArrayList")
For i = 0 To UBound(f)::arrList.Add f(i)::Next
arrList.Reverse
Debug.Print Join(arrList.toarray(), Chr(10))
'Methoden vgl. hier :
'https://msdn.microsoft.com/de-de/library/system.collections.arraylist_methods(v=vs.110).aspx
End Sub
Schau mal hier:
http://www.snb-vba.eu/VBA_Arraylist_en.html

Code:
Sub M_snb()
    sn = Array("Mo", "Die", "Mi", "Do", "Fr", "Sa", "So")

    With CreateObject("System.Collections.ArrayList")
        For j = 2 To 5
           .Add sn(j)
           sn(j) = "~"
        Next
        .Reverse
        sn(j - 1) = Join(.toarray, vbLf)
    End With

    MsgBox Join(Filter(sn, "~", 0), vbLf)
End Sub
@snb, danke für die Seitenempfehlung, habe ich aber schon auf dem Radar gehabt.
Zu Deiner Seite, absolut lesenswert und top. Fünf Sterne.

Zu der Lösung, nicht ganz das was ich suche. Die Lösung wird zwar richtig ausgegeben,
aber das ArrayList wird ja nicht verändert (s. Lokalfenster bei der Einzelschrittcompilierung).
Was ich brauche ist eben genau diese Manipulation der vorliegenden ArrayList.

Schaut man auf folgende Seite von MS
https://msdn.microsoft.com/de-de/library....110).aspx
findet man unter den Methoden bei reverse folgenden Eintrag:

Reverse(Int32, Int32) | Kehrt die Reihenfolge der Elemente im angegebenen Bereich um.

Doch wie geht das? Egal was ich mache, es haut bei mir einfach nicht hin.
Hallo,

kommt das deiner Idee nahe?


Code:
Sub T_1()
Ar = Array("a", "b", "c", "d", "e", "f", "g", "h")
With CreateObject("System.Collections.ArrayList")
   For Each it In Ar
       .Add it
   Next it
   Set st = .getrange(1, 2)
   st.Reverse
   i = 3
   Set st2 = .getrange(i, .Count - 1 - i)
   Debug.Print .Count, .Item(0), Join(st.toarray, ", "), Join(st2.toarray, ", ")
End With
End Sub


Die Ausgabe erfolgt ins Direktfenster des VBE.

mfg
Hi

Reverse(Int32, Int32) und diverse andere Methoden funktionieren in meiner Excelversion auch nicht.
Im Beispiel wird die ArrayList direkt geändert.
Code:
Sub Drehen()
With CreateObject("System.Collections.ArrayList")
Ar = Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So")
For Each it In Ar
  .Add it
Next it
'Drehen
k = .IndexOf("Di", 0)     'von "Di"
n = .IndexOf("Fr", 0)     'bis "Fr"
For i = k To n - 1
   it = .Item(n)
   .RemoveAt (n)
   .Insert i, it
Next
MsgBox Join(.toarray, vbLf)
End With
End Sub

Gruß Elex