28.01.2015, 19:30
Seiten: 1 2
28.01.2015, 19:39
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.
Wer es mal mit einem ausgefüllten Bereich testen möchte, kann folgenden Code zuesrt zum reinschreiben von Werten nehmen:
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.
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.
28.01.2015, 19:54
Hallo Atilla,
deine Version dürfte die schnellste sein. Da erreicht man nicht mal die Kaffeemaschine. :67:
deine Version dürfte die schnellste sein. Da erreicht man nicht mal die Kaffeemaschine. :67:
28.01.2015, 19:57
Hi Stefan,
Du solltest ja erst den Kaffee holen und dann die Codes laufen lassen und dabei genüsslich Deinen Kaffee schlürfen.
Du solltest ja erst den Kaffee holen und dann die Codes laufen lassen und dabei genüsslich Deinen Kaffee schlürfen.
28.01.2015, 20:44
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:
Gemessen habe ich die Prozedur vom Start bis vor Anzeige der Unikate.
Testdaten habe ich mit folgendem Makro erzeugt:
Gruß
Max
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
28.01.2015, 21:15
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:
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
28.01.2015, 21:40
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
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
28.01.2015, 22:13
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.
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.
Seiten: 1 2