Registriert seit: 12.04.2014
Version(en): Office 365
Hallo,
sorry, das
Zitat: In jedem Feld steht ein Wert habe ich überlesen. Danke für den Hinweis.
Gruß Peter
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo zusammen,
wenn VBA eingesetzt wird dann würde ich bei so vielen Daten nicht mit einer For Each Schleife arbeiten.
Hier eine Variante, die etwas schneller ein Ergebnis ausspucken sollte.
Code:
Sub unicate() Dim i As Long, j As Long Dim objDic As Object Dim feld feld = Range("A2:FAN2160") Set objDic = CreateObject("Scripting.Dictionary") For i = 1 To 2159 For j = 1 To 4096 objDic(feld(i, j)) = 1 Next j Next i MsgBox objDic.Count End Sub
Wer es mal mit einem ausgefüllten Bereich testen möchte, kann folgenden Code zuesrt zum reinschreiben von Werten nehmen:
Code:
Sub schreib() Range("A2:FAN2") = 1 Range("A3:FAN2160") = 2 End Sub
Es wird in Zeile 1 eine 1 reingeschrieben
und in die anderen wir 2 geschrieben.
wenn dann der Code unicate ausgeführt wird sollte als Ergebnis 2 rauskommen.
Ihr könnt euch ja einen Kaffee holen und nach dem Ausfüllen der Tabelle die drei Varianten zum auslesen mal laufen lassen.
Gruß Atilla
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Atilla, deine Version dürfte die schnellste sein. Da erreicht man nicht mal die Kaffeemaschine. :67:
Gruß StefanWin 10 / Office 2016
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hi Stefan,
Du solltest ja erst den Kaffee holen und dann die Codes laufen lassen und dabei genüsslich Deinen Kaffee schlürfen.
Gruß Atilla
Registriert seit: 01.11.2014
Version(en): 2007, 2010
Hi zusammen,
nun ja, für das Schlürfen eines Kaffess reicht es nicht, aber Deine Lösung ist eindeutig
die performanteste. Du und Deine Arrays :32:
Hier die Messergebnisse:
Code:
Start Steffl:28.01.2015 20:33:22 Ende Steffl:28.01.2015 20:34:04 Start Max:28.01.2015 20:34:22 Ende Max:28.01.2015 20:35:08 Start Atilla:28.01.2015 20:35:28 Ende Atilla:28.01.2015 20:35:38
Gemessen habe ich die Prozedur vom Start bis vor Anzeige der Unikate.
Testdaten habe ich mit folgendem Makro erzeugt:
Code:
Sub Zufallszahlen() Tabelle1.Range("A2:FAN2160").FormulaArray = "=INT(RAND()*1000)" End Sub
Gruß
Max
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Max,
ist aber nicht so geschickt in den großen Bereich Arrayformeln rein zu schreiben.
Das könnte sich auch noch negativ auswirken.
Nach dem reinschreiben würde ich in Werte umwandeln:
Code:
Sub Zufallszahlen() Tabelle1.Range("A2:FAN2160").FormulaArray = "=INT(RAND()*1000)" Tabelle1.Range("A2:FAN2160").Value = Tabelle1.Range("A2:FAN2160").Value End Sub
Gruß Atilla
Registriert seit: 01.11.2014
Version(en): 2007, 2010
Hi Atilla, bei der Verwendung von "Zufallsbereich" mache ich das immer. Warum das hier jetzt negativ sein könnte, verstehe ich nicht so recht. Kannst Du das näher erklären. Gruß Max
Angehängte Dateien
Thumbnail(s)
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Max, kann muss nicht. In diesem Fall eher nicht, weil Deine Array Formel sich nicht auf einen Tabellenbereich bezieht und zum anderen die Ausgabe in der Msgbox erfolgt. Das hatte ich bei meinen Gedanken ausgeblendet.
Gruß Atilla