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.

Verschiedene Werte in einer Matrix zählen.
#11
Hallo,

sorry, das
Zitat:In jedem Feld steht ein Wert
habe ich überlesen. Danke für den Hinweis.
Gruß
Peter
Antworten Top
#12
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
Antworten Top
#13
Hallo Atilla,

deine Version dürfte die schnellste sein. Da erreicht man nicht mal die Kaffeemaschine. :67:
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#14
Hi Stefan,

Du solltest ja erst den Kaffee holen und dann die Codes laufen lassen und dabei genüsslich Deinen Kaffee schlürfen. Cigar
Gruß Atilla
Antworten Top
#15
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
Antworten Top
#16
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
Antworten Top
#17
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)
   
Antworten Top
#18
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
Antworten Top


Gehe zu:


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