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

einzelnen Wert aus Array löschen

Forumthread: einzelnen Wert aus Array löschen

einzelnen Wert aus Array löschen
24.12.2007 17:00:00
Franc
Hi,
ich habe ein Array zum Beispiel
x = Array("a", "b", "c", "d", "e")
Per Zufallszahl wird daraus ein Wert ermittelt also sagen wir 2
Das wäre in dem Fall "c".
Wie stelle ich es an, dass danach der Wert "c" rausgelöscht wird und der Rest drinbleibt?
vorher
x = Array("a", "b", "c", "d", "e")
nachher
x = Array("a", "b", "d", "e")

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: einzelnen Wert aus Array löschen
24.12.2007 17:32:00
Ramses
Hallo
das geht z.B. so
Option Explicit

Sub test()
    Dim myArr As Variant, tmpArr As Variant
    Dim tmpStr As String
    Dim Qe As Variant, i As Integer, n As Integer
    myArr = Array("a", "b", "c", "d", "e")
    For i = 0 To UBound(myArr)
        tmpStr = tmpStr & myArr(i) + ";"
    Next i
    'Im Beispiel alles ohne Fehlerprüfung :-)
    Qe = InputBox("Welcher Wert soll entfernt werden:" & vbCrLf & _
    tmpStr & vbCrLf & "Bitte den Buchstaben eingeben", "Array Wert löschen", "c")
    ReDim tmpArr(UBound(myArr) - 1)
    n = 0
    'Array temporär umschreiben
    For i = 0 To UBound(myArr)
        If myArr(i) <> Qe Then
            tmpArr(n) = myArr(i)
            n = n + 1
        End If
    Next i
    'Altes Array löschen
    Erase myArr
    'Meldestring leeren
    tmpStr = ""
    'Originales Array neu dimensionieren
    ReDim myArr(UBound(tmpArr))
    'Werte aus dem temporären Array in das Original-Array umschreiben
    myArr = tmpArr
    For i = 0 To UBound(myArr)
        tmpStr = tmpStr & myArr(i) + ";"
    Next i
    MsgBox "Neues Array: " & Left(tmpStr, Len(tmpStr) - 1)
End Sub

Gruss Rainer

Anzeige
AW: einzelnen Wert aus Array löschen
24.12.2007 17:49:00
Franc
Das alles nur um einen Wert zu entfernen ... ^^
Habs für meinen Fall angepasst und funktioniert einwandfrei.
Danke für die Hilfe.

AW: einzelnen Wert aus Array löschen
24.12.2007 21:34:21
MichaV
Hi Rainer,
was hast Du gegen die Join- Funktion?
Gruß und ein frohes Fest! Micha

AW: einzelnen Wert aus Array löschen
24.12.2007 22:07:30
Ramses
Hallo
"...was hast Du gegen die Join- Funktion?.."
Nix,... aber wer auf die Rennstrecke will, muss erst mal fahren lernen :-)
Gruss Rainer

Anzeige
AW: für Fahrschüler
24.12.2007 22:27:00
MichaV
Hallo,
wenn schon lernen, dann aber bitte effektiv:


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


Gruß- Micha
PS: Rückmeldung wäre nett.

Anzeige
F1
24.12.2007 22:47:00
Josef
Hallo Micha, Servus Rainer,
und dann gibt's noch FILTER().
Sub test2()
Dim myArr As Variant
Dim x As Integer, s As Variant

myArr = Array("a", "b", "c", "d", "e")

Randomize

'Zufälligen Eintragwählen (Index)
x = Int((UBound(myArr) + 1) * Rnd)

'Zufälliger Eintrag
s = myArr(x)

'Eintrag Löschen
myArr = Filter(myArr, s, False)

MsgBox Join(myArr, vbCrLf)

End Sub

Gruß Sepp

Anzeige
AW: F1
24.12.2007 23:00:00
MichaV
Hallo Sepp,
danke, wieder was gelernt.
Gruß- Micha

Das ist wirklich cool...
24.12.2007 23:09:00
Ramses
Hallo Sepp
... das kannte ich auch noch nicht.
Gruss Rainer

AW: für Fahrschüler
24.12.2007 23:18:00
Ramses
Hallo Micha
Schöne Variante,... aber eben auch nur eine Variante.
Ich ging das ganze etwas pragmatischer an,... hast du ein Problem damit ?
Das Ergebnis stimmt sowohl bei Dir wie bei mir.
Aber was solls, heute ist schliesslich Weihnachten. Dann kriegt er eben gleich 3 Variationen serviert.
Gruss Rainer

Anzeige
AW: Schöne Variante.....
25.12.2007 00:14:23
Gerd
Guten Morgen,
welche diejenige ist , die auch bei mehreren gleichen Werten im Array, nur den Wert mit der vorgegebenen Position herausnimmt.
Grüße Gerd
;
Anzeige

Infobox / Tutorial

Einzelnen Wert aus einem Array löschen in Excel VBA


Schritt-für-Schritt-Anleitung

Um einen einzelnen Wert aus einem Array in Excel VBA zu löschen, kannst Du folgende Schritte ausführen:

  1. Array definieren: Erstelle ein Variant-Array mit den gewünschten Werten.

    Dim myArr As Variant
    myArr = Array("a", "b", "c", "d", "e")
  2. Wert ermitteln: Bestimme den Index des Wertes, den Du entfernen möchtest. Zum Beispiel, um "c" zu entfernen:

    Dim indexToDelete As Integer
    indexToDelete = 2 ' Index für "c"
  3. Array umsortieren: Verschiebe alle Werte nach dem zu löschenden Index um eine Position nach vorne.

    Dim i As Integer
    For i = indexToDelete To UBound(myArr) - 1
       myArr(i) = myArr(i + 1)
    Next i
  4. Array dimensionieren: Nutze ReDim Preserve, um das Array zu verkleinern und den letzten Wert zu löschen.

    ReDim Preserve myArr(UBound(myArr) - 1)
  5. Ergebnis anzeigen: Du kannst das Ergebnis mit einer MsgBox ausgeben.

    MsgBox Join(myArr, vbCrLf)

Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des Bereichs"

    • Lösung: Stelle sicher, dass der Index, den Du löschen möchtest, im gültigen Bereich des Arrays liegt. Überprüfe den Wert von UBound(myArr).
  • Fehler: Nach dem Löschen sind immer noch Werte im Array.

    • Lösung: Stelle sicher, dass Du ReDim Preserve korrekt verwendest, um das Array zu verkleinern.

Alternative Methoden

  1. Filter-Funktion: Nutze die Filter-Funktion, um einen bestimmten Wert zu entfernen.

    Dim newArr As Variant
    newArr = Filter(myArr, "c", False)
  2. Join-Funktion: Du kannst auch die Join-Funktion verwenden, um die Werte in einer neuen Darstellung anzuzeigen, nachdem du sie bearbeitet hast.


Praktische Beispiele

Hier sind zwei Beispiele zur Verwendung der oben beschriebenen Methoden:

Beispiel 1: Wert über Index löschen

Sub DeleteValueByIndex()
    Dim myArr As Variant
    myArr = Array("a", "b", "c", "d", "e")
    Dim indexToDelete As Integer
    indexToDelete = 2 ' Lösche "c"

    ' Array umsortieren
    Dim i As Integer
    For i = indexToDelete To UBound(myArr) - 1
        myArr(i) = myArr(i + 1)
    Next i

    ' Array verkleinern
    ReDim Preserve myArr(UBound(myArr) - 1)
    MsgBox Join(myArr, vbCrLf)
End Sub

Beispiel 2: Wert mit Filter löschen

Sub DeleteValueWithFilter()
    Dim myArr As Variant
    myArr = Array("a", "b", "c", "d", "e")
    Dim valueToDelete As String
    valueToDelete = "c"

    myArr = Filter(myArr, valueToDelete, False)
    MsgBox Join(myArr, vbCrLf)
End Sub

Tipps für Profis

  • Verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind, was die Fehlersuche erleichtert.
  • Nutze Error Handling, um mögliche Laufzeitfehler abzufangen, wenn Du mit Arrays arbeitest.
  • Experimentiere mit unterschiedlichen Methoden zur Array-Manipulation, um den für Deinen speziellen Fall besten Ansatz zu finden.

FAQ: Häufige Fragen

1. Wie kann ich mehrere gleiche Werte aus einem Array löschen? Du kannst eine Schleife verwenden, um alle Vorkommen eines Wertes zu identifizieren und dann zu löschen, indem Du das Array umsortierst.

2. Ist es möglich, ein Array in VBA zu leeren? Ja, Du kannst Erase myArr verwenden, um ein Array zu leeren und den Speicher freizugeben.

3. Was ist der Unterschied zwischen ReDim und ReDim Preserve? ReDim dient zum Ändern der Größe eines Arrays, während ReDim Preserve die vorhandenen Werte im Array beibehält, wenn Du die Größe änderst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige