Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
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

Eintrag aus Variant/Variant entfernen

Eintrag aus Variant/Variant entfernen
08.12.2021 13:13:31
LeoLeo
Halllo hallo,
ich habe folgendes Problem:
ich speichere in zwei verschiedenen Variant ("Label1", "Label2") jeweils mit dem .Range Befehl einzelne Spalten. Im Lokal-Fenster wird dann angezeigt, dass die zB Label2 nach dem Speichern den Datentyp Variant/Variant hat (also kein Array oder so, siehe Bild unten).
Mit zwei For-Schleifen durchlaufe ich beide davon und suche nach gleichen Einträgen. Wenn gleiche gefunden wurden, möchte ich aus einem der beiden Variant den entsprechenden Eintrag löschen. Wie mache ich das?
Zum Kontext: Alle Labels in Label2 gibt es in Label1 (in Label1 gibts halt noch paar mehr, alle sind jedoch einzigartig). Damit nicht immer alle Label2 durchsucht werden müssen, will ich das schon gefundene entfernt werden, und damit die Laufzeit verkürzt wird.
Vielen Dank schon mal im Voraus :)
So ungefähr hab ich es ausgebaut:

Dim Label1 As Variant, Label2 As Variant, Label1Zelle as Variant, Label2Zelle As Variant
Label1 = Sheets("Test").Range("E1: E60000")
Label2 = Sheets("Test").Range("C5: C6000")
For Each Label1Zelle In Label1
For Each Label2Zelle In Liste Label2
If StrComp(Label1Zelle, Label2Zelle) = 0 Then
'hier möchte ich den Entsprechenden Eintrag in Label2 löschen
Exit For
End If
Next Label2Zelle
Next Label1Zelle
Bild aus dem Lokalfenster von einem der Variant: (sind andere Bezeichnungen, nicht verwirren lassen)
Userbild

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eintrag aus Variant/Variant entfernen
08.12.2021 14:14:49
Rudi
Hallo,
natürlich sind das Arrays. Label1(1 to 60000, 1 to 1); Label2(1 to 5996, 1 to 1)
Werte aus einem Array zu löschen geht nicht so einfach und ist aufwändiger als sie zu durchlaufen.
Gruß
Rudi
AW: Eintrag aus Variant/Variant entfernen
08.12.2021 14:37:19
LeoLeo
Hallo Rudi,
vielen Dank für deine Antwort.
Das Problem ist einfach, dass das durchlaufen, so wie es jetzt ist ca 5 minuten braucht und ich dachte durch das Entfernen die Durchläufe gegen Ende zu verkürzen. In wie fern ist das Aufwendig? hätte ich eine ArrayList, könnte man das ja einfach mit dem Befehl list.RemoveAt 2 den 3. Eintrag löschen.
Hättest du sonst eine Idee, was man machen könnte um die Durchlaufzeit zu minimieren?
LG Leo
Anzeige
AW: Eintrag aus Variant/Variant entfernen
08.12.2021 15:03:14
Rudi
Hallo,
ich kenne deine Absicht nicht. Wie es aussieht, willst du Texte vergleichen.
Vielleicht hilft dir das:

Sub aaa()
Dim Label1 As Variant, Label2 As Variant
Dim objLabel2 As Object
Dim Label1Zelle, Label2Zelle
Set objLabel2 = CreateObject("scripting.dictionary")
Label1 = Sheets("Test").Range("E1:E60000")
Label2 = Sheets("Test").Range("C5:C6000")
For Each Label2Zelle In Label2
objLabel2(Label2Zelle) = 0
Next
For Each Label1Zelle In Label1
If objLabel2.exists(Label1Zelle) Then
objLabel2.Remove (Label1Zelle)
End If
Next Label1Zelle
End Sub
Gruß
Rudi
Anzeige
AW: Eintrag aus Variant/Variant entfernen
08.12.2021 16:37:33
LeoLeo
Ja Prinzipiell vergleiche ich zwei Texte, und wenn diese übereinstimmen wird ein bestimmter Wert in meine Excel eingetragen.
Ich habe sozusagen zwei Listen mit Labels (texte), wobei jedes Label in der jeweiligen Liste nur einmal vorkommt. Die eine (Label1) ist die komplette Liste, die andere (Label2) hat nur einen Teil von der Labels von Label1 (könnte theoretisch auch mal alle Labels haben, aber ist eher nicht der Fall).
Wenn ich also zwei Listen mit um die 60.000 Textinhalten habe, braucht es einfach zu lange alles zu durchsuchen. Deshalb dachte ich durch rauslöschen der schon gefundenen Labels könnte ich die Liste während den Schleifen verkleinern d.h. je weiter in der For-Schleife, desto weniger Möglichkeiten zum durchsuchen.
Ich schau mir morgen mal deinen Ansatz an.
Vielen Dank!
Anzeige
AW: Eintrag aus Variant/Variant entfernen
08.12.2021 17:15:23
Daniel
Hi
das was du machen willst, geht am schnellsten so:
1. sortiere die Zellen C5:C6000 aufsteigen
2. in Zelle C4 sollte die 0 stehen
3. das eintragen des bestimmten Wertes machst du dann der per Formeln in F1:F60000: =Wenn(SVerweis(E1;C4:C6000;1;wahr)=E1;"bestimmter Wert";"")
Aufgrund der Sortierung kann der SVerweis hier eine wesentlich schnellere Suchmethode verwenden.
im Sortieren ist Excel sehr schnell.
Wenn du den Zellbereich C5:C6000 nicht umsortieren willst, kopiere ihn dir vorher in eine freie Spalte und verwende die.
und ja, wenns funktioniert, kannst du den Ablauf auch per Makro ausführen lassen.
Gruß Daniel
Anzeige
AW: Eintrag aus Variant/Variant entfernen
09.12.2021 07:16:48
LeoLeo
Guten Morgen,
ja das mit dem SVerweis hatte ich bisher und ich hatte gehofft es anders irgendwie schneller zu machen. Aber wenn du meinst, dass das so am schnellsten sei, gibts halt keine andere Möglichkeit.
Vielen Dank!
AW: Eintrag aus Variant/Variant entfernen
09.12.2021 09:24:08
Daniel
Hattest du auch die Variante mit 4. Parameter = Wahr für sortierte Listen verwendet oder die mit dem 4. Parameter = Falsch für unsortierten Listen?
Wie hättest du das in deinem Makro umgesetzt?
Gruß Daniel
AW: Eintrag aus Variant/Variant entfernen
08.12.2021 16:21:06
LeoLeo
Hallo Rudi,
vielen Dank für deine Antwort.
Das Problem ist einfach, dass das durchlaufen, so wie es jetzt ist ca 5 minuten braucht und ich dachte durch das Entfernen die Durchläufe gegen Ende zu verkürzen. In wie fern ist das Aufwendig? hätte ich eine ArrayList, könnte man das ja einfach mit dem Befehl list.RemoveAt 2 den 3. Eintrag löschen.
Hättest du sonst eine Idee, was man machen könnte um die Durchlaufzeit zu minimieren?
LG Leo
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige