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

Forumthread: Werte aus Array löschen

Werte aus Array löschen
Michael2010
Hallo allerseits,
mit Array stehe ich irgendwie auf Kriegsfuß :-(
Ich lese einen Bereich verschiedenen Datums (E8 bis E24) in ein Array ein, weil ich auf diesem Weg schnell festestellen kann ob sich das Vergleichsdatum im Bereich E8:bis E24 befindet. Das klappt auch, doch kann es auch Datum mehrmal in dem Bereich geben, deshalb möchte ich ein gefundenes Datum aus dem Array löschen, dazu habe ich in der Forumsuche folgenden Code gefunden.
Option Explicit

Sub test()
Dim myArr As Variant
Dim i As Integer, x As Integer
myArr = Array("a", "b", "c", "d", "e")
'der 2. Wert soll gelöscht werden
x = 2
x = x - 1 'denn der "zweite" Wert hat den Index 1, und nicht 2
For i = x To UBound(myArr) - 1
'alle Werte ab dem "zweiten" Wert um eins nach vorne schieben
myArr(i) = myArr(i + 1)
Next i
'und den letzten Wert löschen
ReDim Preserve myArr(UBound(myArr) - 1)
MsgBox Join(myArr, vbCrLf)
End Sub

Das funktioniert auch, jetzt kommt mein umngebauter Code.

Sub test()
Dim myArr As Variant
Dim i As Integer, x As Integer
myArr = Sheets("Ferien").Range("E8:E24")
'der 2. Wert soll gelöscht werden
x = 2
x = x - 1 'denn der "zweite" Wert hat den Index 1, und nicht 2
For i = x To UBound(myArr) - 1
'alle Werte ab dem "zweiten" Wert um eins nach vorne schieben
myArr(i, 1) = myArr(i + 1, 1)
Next i
'und den letzten Wert löschen
ReDim Preserve myArr(UBound(myArr) - 1)
MsgBox Join(myArr, vbCrLf)
End Sub

Beim Redim kommt der Fehler : Index außerhalb des gültigen Bereiches
Wenn ich mir die Werte im meinem Array ansehen ist das so aufgebaut.
myArr(1)
myArr(1,1) #02.04.2012#
.
.
. my Arr(17)
myArr(17,1) #14.12.2012#
Bei diesem Test ist der 2 Wert auch gelöscht worden doch das REDIM und löschen des Wertes klappt nicht
Kann mir jemand den Entscheidenden Hinweis geben?
Warum hat das Array 2 Dimensionen (1,1) wo ich nur eine Spalte einlese?
Der Fehler bei REDIM hat damit was zu tun, doch weiß ich nicht wo ich die 2 Dimension (,1) hinsetzen soll.
Gruß
Michael
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Werte aus Array löschen
17.04.2012 12:19:15
CitizenX
Hi,
zum sammmeln von ungleichen Werten /löschen eignet sich besser das "Dictionary"
an bei mal ein Bsp davon und wie die deine Variante umsetzen kannst:

Option Explicit
Sub test1()
Dim oDict As Object
Dim varBereich, i As Long
Dim strSuchDatum As String
Set oDict = CreateObject("Scripting.dictionary")
' dein Suchdatum
strSuchDatum = "02.02.2012"
' dein Datumsbereich
varBereich = Range("E8:E24")
'nur ungleiche Werte sammeln
For i = 1 To UBound(varBereich, 1)
oDict(CStr(varBereich(i, 1))) = vbNullString
Next
'Suchwert löschen wenn vorhanden
If oDict.Exists(strSuchDatum) Then
oDict.Remove strSuchDatum
Else
MsgBox strSuchDatum & " existiert nicht"
End If
'Ausgabe
MsgBox Join(oDict.Keys, vbNewLine)
End Sub
Sub test2()
Dim myArr
Dim i As Integer, x As Integer
myArr = Range("E8:E24")
'der 2. Wert soll gelöscht werden
x = 2
x = x - 1 'denn der "zweite" Wert hat den Index 1, und nicht 2
For i = x To UBound(myArr) - 1
'alle Werte ab dem "zweiten" Wert um eins nach vorne schieben
myArr(i, 1) = myArr(i + 1, 1)
Next i
myArr = Application.Transpose(myArr)
'und den letzten Wert löschen
ReDim Preserve myArr(UBound(myArr) - 1)
MsgBox Join(myArr, vbCrLf)
End Sub

Grüße
Steffen
Anzeige
AW: Werte aus Array löschen
23.04.2012 14:26:00
Michael2010
Das ist ein guten Ansatz,
ich habe das Problem erstmal auf eine andere Art gelöst.
Danke für den TIPP
Gruß
Michael
;
Anzeige
Anzeige

Infobox / Tutorial

Werte aus Array löschen in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein bestimmtes Datum aus einem Array in Excel VBA zu löschen, kannst du die folgenden Schritte befolgen:

  1. Array einlesen: Du liest die Daten aus einem Zellbereich in ein Array ein. Zum Beispiel:

    Dim myArr As Variant
    myArr = Sheets("Ferien").Range("E8:E24")
  2. Wert auswählen: Bestimme, welchen Wert du löschen möchtest. Hier nehmen wir an, dass du den zweiten Wert löschen möchtest:

    Dim x As Integer
    x = 2
    x = x - 1 ' da der Index bei 0 beginnt
  3. Werte verschieben: Verschiebe alle Werte ab dem gewählten Index um eins nach vorne:

    Dim i As Integer
    For i = x To UBound(myArr) - 1
       myArr(i, 1) = myArr(i + 1, 1)
    Next i
  4. Array verkleinern: Reduziere die Größe des Arrays, um den letzten Wert zu löschen:

    ReDim Preserve myArr(UBound(myArr) - 1)
  5. Ergebnis anzeigen: Zeige das Ergebnis in einer MessageBox an:

    MsgBox Join(myArr, vbCrLf)

Häufige Fehler und Lösungen

Ein häufiger Fehler beim Löschen von Werten aus einem Array ist der "Index außerhalb des gültigen Bereichs". Dies kann passieren, wenn die Dimensionen des Arrays nicht korrekt behandelt werden.

Lösung:

  • Stelle sicher, dass du das Array korrekt einliest und die Dimensionen verstehst. Bei einem eindimensionalen Array ist der Zugriff einfach. Bei einem zweidimensionalen Array ist der Zugriff wie folgt: myArr(i, 1).

Alternative Methoden

Eine alternative Methode zur Bearbeitung von Arrays ist die Verwendung eines Dictionaries. Dies eignet sich besonders gut zum Sammeln ungleicher Werte und zum Löschen.

Hier ist ein einfaches Beispiel:

Dim oDict As Object
Set oDict = CreateObject("Scripting.Dictionary")
Dim varBereich
varBereich = Range("E8:E24")
Dim i As Long

For i = 1 To UBound(varBereich, 1)
    oDict(CStr(varBereich(i, 1))) = vbNullString
Next

If oDict.Exists("02.02.2012") Then
    oDict.Remove "02.02.2012"
End If

MsgBox Join(oDict.Keys, vbNewLine)

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du eine Excel-Matrix löschen kannst. Angenommen, du hast eine Matrix mit Werten, und du möchtest bestimmte Werte entfernen:

Dim myArr As Variant
myArr = Range("E8:E24").Value

' Wert an Index 1 löschen
myArr(1, 1) = vbNullString

' Ausgabe der Matrix
MsgBox Join(Application.Transpose(myArr), vbNewLine)

In diesem Beispiel wird der Wert an Index 1 gelöscht. Du kannst auch die Methode verwenden, um leere Einträge zu entfernen, indem du die Werte in ein neues Array kopierst.


Tipps für Profis

  • Performance: Bei großen Datenmengen kann die Verwendung eines Dictionaries anstelle eines Arrays die Leistung verbessern.
  • Fehlerüberprüfung: Implementiere Fehlerüberprüfungen, um sicherzustellen, dass die Indizes innerhalb der Grenzen des Arrays liegen.
  • Datenvalidierung: Überprüfe die Eingabewerte, um sicherzustellen, dass sie im richtigen Format vorliegen, bevor du sie ins Array einfügst.

FAQ: Häufige Fragen

1. Wie kann ich ein mehrdimensionales Array in VBA löschen? Du kannst die Methode ReDim Preserve nutzen, um die Dimensionen des Arrays zu ändern, achte jedoch darauf, dass du die richtige Dimension angibst.

2. Gibt es eine Möglichkeit, leere Einträge aus einem Array zu entfernen? Ja, du kannst ein neues Array erstellen und nur die gefüllten Einträge kopieren. Alternativ kannst du ein Dictionary verwenden, um nur einzigartige Werte zu speichern und leere Einträge zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige