Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Doppelte Elemente in Array Löschen

Doppelte Elemente in Array Löschen
20.06.2006 15:24:08
Thorsten
Hallo,
ich hab mir mal eine Funktion geschrieben die doppelte Elemente in einem Array löscht. Leider funktioniert die noch nicht ohne Fehler zu Produzieren.

Function DelTwice(VarArray As Variant)
Dim i As Integer, j As Integer
If Not IsArray(VarArray) Then Exit Function
For i = 0 To UBound(VarArray) - 1
If VarArray(i) = VarArray(i + 1) Then
For j = i To UBound(VarArray) - 1
VarArray(j) = VarArray(j + 1)
Next j
ReDim Preserve VarArray(UBound(VarArray) - 1)
End If
Next i
End Function

Ich bekomme ein "Index ist außerhalb des gültigen Bereichs" Meldung für die Zeile:
VarArray(j) = VarArray(j + 1)
Aufgerufen hab ich die Funktion so:
Call DelTwice(aCKunde)
Gruß Thorsten
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppelte Elemente in Array Löschen
20.06.2006 15:31:51
u_
Hallo,
i läuft durch bis zum urprünglichen Ende des Arrays-1. Demnach wird i irgendwann größer als die Länge des Arrays.
Gruß
Geist ist geil!
(Dies ist ein allgemeines Statement und nicht an bestimmte Personen gerichtet.)
AW: Doppelte Elemente in Array Löschen
20.06.2006 15:37:39
Thorsten
Hallo u_,
das versteh ich grad irgendwie garnicht, kannst du mir noch etwas auf die sprünge helfen?
In welcher Zeile ist das denn definiert?
Gruß Thorsten
Anzeige
AW: Doppelte Elemente in Array Löschen
20.06.2006 15:43:58
Thorsten
Danke, jetzt hab ichs verstanden :)
Neuer Code:

Function DelTwice(VarArray As Variant)
Dim i As Integer, j As Integer, k As Integer, Bearbeitet As Boolean
If Not IsArray(VarArray) Then Exit Function
k = UBound(VarArray)
Do
Bearbeitet = False
For i = 0 To k - 1
If VarArray(i) = VarArray(i + 1) Then
For j = i To k - 1
VarArray(j) = VarArray(j + 1)
Next j
ReDim Preserve VarArray(UBound(VarArray) - 1)
k = k - 1
Bearbeitet = True
Exit For
End If
Next i
Loop While Bearbeitet
End Function

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Doppelte Werte im VBA-Array entfernen


Schritt-für-Schritt-Anleitung

Um doppelte Werte in einem VBA-Array zu entfernen, kannst du die folgende Funktion nutzen. Diese Methode überprüft, ob ein Wert im Array mehrfach vorhanden ist und entfernt die Duplikate.

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Function DelTwice(VarArray As Variant)
    Dim i As Integer, j As Integer, k As Integer, Bearbeitet As Boolean
    If Not IsArray(VarArray) Then Exit Function
    k = UBound(VarArray)
    Do
        Bearbeitet = False
        For i = 0 To k - 1
            If VarArray(i) = VarArray(i + 1) Then
                For j = i To k - 1
                    VarArray(j) = VarArray(j + 1)
                Next j
                ReDim Preserve VarArray(UBound(VarArray) - 1)
                k = k - 1
                Bearbeitet = True
                Exit For
            End If
        Next i
    Loop While Bearbeitet
End Function
  1. Rufe die Funktion in deinem Code auf, um die doppelten Werte zu entfernen:
Call DelTwice(aCKunde)

Häufige Fehler und Lösungen

  • Index ist außerhalb des gültigen Bereichs: Dieser Fehler tritt auf, wenn das Array während der Schleife verändert wird. Stelle sicher, dass du die Schleifenbedingungen korrekt setzt und die ReDim Preserve-Anweisung richtig anwendest.

  • Unzureichende Array-Größe: Überprüfe, ob das Array, das du übergibst, tatsächlich Werte enthält. Ein leeres Array kann ebenfalls zu Fehlern führen.


Alternative Methoden

Wenn du eine andere Methode zur Entfernung von Duplikaten in einem Array ausprobieren möchtest, kannst du auch die Verwendung von Dictionaries in Betracht ziehen. Hier ist ein Beispiel:

Function RemoveDuplicates(VarArray As Variant) As Variant
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    Dim item As Variant

    For Each item In VarArray
        If Not dict.Exists(item) Then
            dict.Add item, Nothing
        End If
    Next item

    RemoveDuplicates = dict.Keys
End Function

Diese Methode nutzt ein Dictionary, um doppelte Werte zu speichern und anschließend die einzigartigen Werte zurückzugeben.


Praktische Beispiele

Angenommen, du hast ein Array mit den Werten {"A", "B", "A", "C", "B"}. Mit der Funktion DelTwice kannst du die Duplikate wie folgt entfernen:

Dim myArray As Variant
myArray = Array("A", "B", "A", "C", "B")
Call DelTwice(myArray)

Nach der Ausführung wird myArray die Werte {"A", "B", "C"} enthalten.


Tipps für Profis

  • Überlege, ob du die Option Base 1 am Anfang deines Moduls verwenden möchtest, um die Indizierung des Arrays zu ändern.
  • Nutze Fehlerbehandlungsroutinen, um unerwartete Probleme während der Ausführung abzufangen.
  • Bei großen Arrays kann es effizienter sein, die Daten in eine Collection oder ein Dictionary zu laden, um die Duplikate zu entfernen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Array nicht leer ist?
Du kannst die Funktion IsEmpty() verwenden, um zu überprüfen, ob das Array Werte enthält.

2. Funktioniert dieser Code auch in Excel 365?
Ja, der Code sollte in allen gängigen Excel-Versionen funktionieren, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige