Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - rechengünstiger Abgleich zweier Listen
#1
Hi Leute,

ich benötige einen Tipp in Sachen VBA von euch. Das Topic ist ein wenig merkwürdig gewählt, mir fiel nur nichts besseres ein :).

Meine Prämisse ist Schnelligkeit vor Komfortfunktion, von daher suche ich ein schnelles Makro für folgendes Problem:


Ich habe eine Namensliste  mit ca. 150 Namen - diese sind nicht sortiert.
Weiterhin habe ich eine zweite Liste (ein kleiner Auszug dieser Namen), die ich mit den 150 Namen abgleichen möchte. Es kommt vor, dass in der Namensliste mal ein Name rausgelöscht wird. Nun soll auf Knopfdruck abgeglichen werden, ob noch alle Namen der zweiten Liste in der Namensliste vorhanden sind.

Eine for-next-Schleife mit Suche in der Namensliste für jeden einzelnen Namen dürfte viel zu langsam und rechenintensiv sein...fällt euch noch etwas besseres ein?


Vielen Dank fürs Gehirnschmalzanregen und Gruß


Angehängte Dateien
.xlsx   Sortierung.xlsx (Größe: 10,01 KB / Downloads: 10)
Antworten Top
#2
Hallo

Der einfachste Weg ist Bed. Format
Arbeitsblatt mit dem Namen 'Tabelle1'
E
1Liste
2Meier
3Quappe
4Nordmann
5Eisfeld
E
1Liste
2Meier

Zellebedingte Formatierung...Format
E21: =ZÄHLENWENN($A$2:$A$7;E2)=0abc
Gruss Guschti
Der Künstler lebt auch vom Applaus
Excel Optimaler Zuschnitt von Stangen/Balken - YouTube
Antworten Top
#3
Hi Guschti,

den Tipp wollte ich eigentlich auch geben - dann hatte ich aber bemerkt, dass in der Beispieldatei ein wichtiger Zusatz drin steht:    

Damit entfällt das Einfache.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#4
Ja genau, es soll im Hintergrund automatisch passieren ... der Code soll in einen bereits bestehenden Code eingebaut werden. Deswegen muss er auch flott sein :).

Habe auch schon daran gedacht, die Namensliste und die Liste die überprüft werden soll per makro untereinander zu kopieren und dann per makro die doppelten rauszulöschen ... wäre das flotter? Dann erkennt er zumindest die Namen, die nicht mehr in der Namensliste sind.
Bin eher der Pragmatische :P ... vll geht es auch eleganter

Gruß
Antworten Top
#5
Hallöchen,

Vielleicht übernimmt der TE das Löschen selbst und sucht, wie in der Aufgabenbeschreibung, nur nach der Methode der Erkennung :17:
Vielleicht soll aber auch nur erkannt werden, das Nordmann rausgelöscht wurde und das ist verdrückt ausgekehrt ... :21:
Dann entfällt das einfache nicht oder nur vielleicht :15:

Wenn es vor allem um eine schnellere Lösung als eine For - Next - Schleife geht, dann käme es darauf an, wo Deine For-Next-Schleife wirkt. Wenn Du das mit Zellbezug machst, ist das deutlich langsamer als wenn Du die Zellinhalte erst in ein Array holst - das geht in einem Rutsch (pro Array) - arrTempxxx = Range("A1:A1000").Value - und dann die Arrays z.B. mit For Next durchsuchst.

Eventuell ist statt der bedingten Formatierung auch eine zusätzliche Spalte interessant, wo Du z.B. mit ZÄHLENWENN feststellst, ob der Name noch vorhanden ist. Dann brauchst Du nur einen Autofilter zu setzen und hast ein Ergebnis. Könnte man auch programmieren ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Zitat:Eine for-next-Schleife mit Suche in der Namensliste für jeden einzelnen Namen dürfte viel zu langsam und rechenintensiv sein

Hast du das denn getestet? Eine Schleife für 150 Namen dürfte in meinen Augen keine nennenswerte Zeit benötigen. Löschen per Schleife ist zwar grundsätzlich tatsächlich eine Schneckenlösung, allerdings ist ja davon auszugehen, dass nur wenige tatsächliche Löschvorgänge je Durchlauf stattfinden. In Kombination mit Application.Screenupdating = False wird auch das nicht ins Gewicht fallen.

Variante mit Schleife: Mach eine Hilfsspalte mit der von Guschti vorgeschlagenen Formel. Bei Codeausführung musst du nur die Hilfsspalte abgrasen lassen und die Einträge mit 0 rauschlöschen lassen
Variante ohne Schleife: Hilfsspalte mit Formel wie zuvor erwähnt. Der Code setzt den Autofilter auf Einträge mit 0 und löscht alle Treffer in einem Rutsch

EDIT: @André: Zwei Dumme, ein Gedanke  :100:
Schöne Grüße
Berni
Antworten Top
#7
Hi Berni,

Zitat:@André: Zwei Dumme, ein Gedanke


das ist dann Crossanswering :15: wenn zwei oder mehr Antworter überschneidend mit schreiben beginnen und dann peu a peu die Antworten erscheinen, ohne das die anderen das mitbekommen hatten :100: Ging mir mit der Antwort vom TE genau so, ansonsten hätte ich ein paar Vielleichts weniger erwähnt Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
PHP-Code:
Sub M_snb()
  sn ListObjects(1).DataBodyRange
  sp 
ListObjects(2).DataBodyRange
   
  With CreateObject
("scripting.dictionary")
    For j 1 To UBound(sn)
      x0 = .Item(sn(j1))
    Next
     
    For j 
1 To UBound(sp)
      If Not .exists(sp(j1)) Then sp(j1) = ""
    Next
  End With
   
  ListObjects
(2).DataBodyRange sp
End Sub 

oder
PHP-Code:
Sub M_snb()
  [
E2:E150] = [if(countif(A2:A150,E2:E150)=0,"",E2:E150)]
End Sub 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
SO viele super Tipps - die helfen mir erstmal weiter ... DANKE :)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste