Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1824to1828
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Filter-Methode um Wert zu entfernen

Filter-Methode um Wert zu entfernen
22.04.2021 12:07:23
NW
Hallo Leute,
ich habe hier im Forum die Filter-Methode kennengelernt, um einzelne Werte aus einem Array zu löschen.
https://www.herber.de/forum/archiv/936to940/936979_einzelnen_Wert_aus_Array_loeschen.html
Da stand folgendes:

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
Dies wollte ich nun nutzen. Ich habe zwei Arrays mit Anzahl x Elementen. Diese vergleiche ich miteinander und wenn Wert a in beiden Listen vorhanden ist, möchte ich den Wert aus dem zweiten Array löschen.
Bis zum Löschen funktioniert es super, aber irgendwie funktioniert meine Filter methode, wie oben nicht.
Hier ein Ausschnitt:
Listold As Variant
(Listold wird eingelesen und enthält eine Liste aus strings)
Indexold ist meine fortlaufende Nummer für den aktuellen Wert in meinem Array)
Listold = Filter(Listold, Listold(Indexold), False, vbTextCompare)
Ich wollte jetzt nicht den ganzen Code reinkopieren, der ist lang und ohne Erklärung schwer zu verstehen.
Indexold = 1
Länge von Indexold ist 16 aktuell
Wert ist ein string
Ich bekomme den Fehler: "Laufzeitfehler 9: Index außerhalb des gültige Bereichs"
Ich habe keine ahnung, wo mein Fehler liegt. Ich habe vorher noch nicht mit Arrays / Variants in VBA gearbeitet.
Gruß,
NW

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filter-Methode um Wert zu entfernen
22.04.2021 12:19:51
Daniel
Hi
wie wird denn das Array Listold eingelesen?
Listlold muss ein eindimenisonales Array sein.
solltest du Listold aus einem Zellbereich erstellen (Listold = Range(...).Value), so hast du immer ein zweidimensionales Array, auch wenn der Zellbereich aus einer Spalte oder einer Zeile besteht.
mit einem zweidimensionalen Array funktioniert das nicht, das müsste dann erst in ein eindimensionales Array umgebaut werden.
Gruß Daniel
AW: Filter-Methode um Wert zu entfernen
22.04.2021 12:21:41
NW
Ja, ich lese eine Spalte aus einem Tabellenblatt aus und schreibe sie in ein array.
Wie baut man sowas um ?
Mir war nicht klar, dass es beim einlesen immer zweidimensional wird - gibt es einen grund dafür ?
Anzeige
AW: Filter-Methode um Wert zu entfernen
22.04.2021 12:42:55
Daniel
Hi
1. siehe andern Thread
2. der Grund dürfte die Vereinheitlichung und Vereinfachung der Programmierung sein.
eindimensionale Arrays müssen anders programmiert werden als zweidimensionale. (x(1), x(1, 1)
da es durchaus möglich ist, dass man Zellbereiche variabler Größe einliest und es vorkommen kann, dass der Zellbereich einspaltig oder mehrspaltig ist, müsste man beide Fälle programmieren und über eine Fallunterscheidung dann den passen Programmteil ausführen und den anderen überspringen.
oder zumindest zusätzlich eine Transformation vom 1-d ins 2-d-Array durchführen
wird insgesamt sehr aufwendig.
Gruß Daniel
Anzeige
AW: Filter-Methode um Wert zu entfernen
22.04.2021 12:46:19
NW
Cool, danke für die Erklärung
noch ein Grund
22.04.2021 13:00:06
Daniel
sehr häufig kommt es vor, dass man Arrays, die man aus einem Zellbereich eingelesen hat, nach der Veränderung auch wieder in diesen zurückschreiben will.
wenn man jetzt bei ein-zeilig- oder ein-spaltigkeit daraus ein eindimensionales Array machen würde, dann könnte man dieses nicht wieder korrekt zurück schreiben, weil man erstmal bestimmen müsste, ob es aus einem einzeiligen oder aus einen einspaltigen Zellbereich entstanden ist.
macht man das immer zweidimensional, dass muss man sich darum nicht kümmern.
Gruß Daniel
AW: noch ein Grund
22.04.2021 13:04:28
NW
Vielen Dank, so lernt man doch am schönsten :-)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige