Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Teilbereich einer ArrayList umkehren
#1
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
Antworten Top
#2
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#3
@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.
Antworten Top
#4
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
Antworten Top
#5
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste