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

Mengenlimit RemoveDuplicates?

Mengenlimit RemoveDuplicates?
04.08.2016 12:58:08
Claus
Hallo zusammen,
nachdem ich die Fehlermeldung "Out of Memory" erhalten habe als ich für etwas mehr als 700000 Records (nur eine Spalte) RemoveDuplicates machen wollte, stellt sich mir die Frage, ob es für RemoveDuplicates eine Obergrenze gibt. Wisst Ihr etwas davon?
Die Datei, die ich verwende ist etwa 11MB gross und braucht im Schnitt etwa 10000K Arbeitspeicher...
Gruss
Claus

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

Betreff
Datum
Anwender
Anzeige
Mengenlimit=Memory! (owT)
04.08.2016 12:59:20
EtoPHG

AW: Mengenlimit=Memory! (owT)
04.08.2016 13:01:41
Claus
Also gibt es kaum Möglichkeiten dies im VBA abzufangen, oder täusche ich mich da?
Gruss
Claus
AW: Mengenlimit=Memory! (owT)
04.08.2016 13:06:23
Gerd
Hallo Claus,
du kannst versuchweise mal den RemoveDuplicates auf z.B. 100.000 Zellen beschränken.
Gruß Gerd
AW: Mengenlimit=Memory! (owT)
04.08.2016 13:09:34
Daniel
Hi
es kommt darauf an, warum deine Speicher voll sind.
das kann man jetzt, ohne die Datei und deinen Code zu kennen, nicht beurteilen.
Gruß Daniel
AW: Mengenlimit=Memory! (owT)
04.08.2016 13:18:29
Claus
Hmmmmm.... ich habe gerade gesehen, dass vor dem Absturz dieses Excel laut TaskManager etwas mehr als 1300000K gebraucht hat... Also scheint es bei der Anwendung von RemoveDuplicates "vollzulaufen"...
Aber selbst wenn eine Abhängigkeit zum verfügbaren Speichers wäre, kann ich das kaum alternativ abfangen im Sinne von "Wenn Speicher kleiner als dann, ansonsten mach RemoveDuplicates"...
Gruss
Claus
Anzeige
AW: Mengenlimit=Memory! (owT)
04.08.2016 13:25:11
Daniel
Hi
wendest du das RemoveDuplikates nur auf diese eine Spalte an oder löschst du damit ganze Zeilen.
eventuell kannst du einen weniger speicherintensiven Workaround verwenden.
wenn du nur eine Spalte bearbeiten willst, kannst du ggf. die Zellwerte in ein Dictionary schreiben und dann die Keys als Ergebnis zurückschreiben.
beim Löschen ganzer Zeilen wäre der Workaround folgender:
per formel alle Zeilen mit 1 kennzeichnen die glöscht werden müssen und die die stehen bleiben müssen mit x
Formel durch werte ersetzten
Tabelle dieser Kennzeichnugnsspalte sortieren und die Zeilen mit 1 löschen.
Gruß Daniel
Anzeige
AW: Mengenlimit=Memory! (owT)
04.08.2016 13:25:59
Daniel
Hi
wendest du das RemoveDuplikates nur auf diese eine Spalte an oder löschst du damit ganze Zeilen.
eventuell kannst du einen weniger speicherintensiven Workaround verwenden.
wenn du nur eine Spalte bearbeiten willst, kannst du ggf. die Zellwerte in ein Dictionary schreiben und dann die Keys als Ergebnis zurückschreiben.
beim Löschen ganzer Zeilen wäre der Workaround folgender:
per formel alle Zeilen mit 1 kennzeichnen die glöscht werden müssen und die die stehen bleiben müssen mit x
Formel durch werte ersetzten
Tabelle dieser Kennzeichnugnsspalte sortieren und die Zeilen mit 1 löschen.
Gruß Daniel
Anzeige
AW: Mengenlimit=Memory! (owT)
04.08.2016 13:30:26
Claus
Danke für den Tipp... Werde ich mal ausprobieren...
Gruss
Claus
eigene Routine
04.08.2016 13:15:23
Rudi
Hallo,
probier mal
Sub RemDup()
Dim arrTmp, objRem As Object, i As Long, arrOut()
Set objRem = CreateObject("scripting.dictionary")
arrTmp = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
For i = 1 To UBound(arrTmp)
objRem(arrTmp(i, 1)) = 0
Next
ReDim arrOut(1 To objRem.Count, 1 To 1)
arrTmp = objRem.keys
For i = 0 To objRem.Count - 1
arrOut(i + 1, 1) = arrTmp(i)
Next
Columns(1).ClearContents
Cells(1, 1).Resize(objRem.Count) = arrOut
End Sub

Gruß
Rudi
AW: eigene Routine
04.08.2016 13:27:34
Claus
Ich hatte zwar schon einen Workaround gebaut, aber Deiner ist eleganter :-) Danke!
Gruss
Claus
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige