Clever-Excel-Forum

Normale Version: Auswertung von zigtausend Daten über Array
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo snb

habe ich gerade aktiviert, war nicht gesetzt. Der Code laeuft trotzdem nicht. Können da noch Referencen fehlen??
Wie kann ich die komplett auflisten, damit du sehen kannst was bei mir vielleicht nicht aktiviert ist??
Ich habe es mit zwei Codes aus dem Internet versucht,aber  beide bleiben in der For Zeile haengen''

mfg  Gast 123

Code:
Sub Test1()
Dim ref, z As Long: z = 2
For Each ref In Application.References
  Cells(z, 2) = ref.fullpath
  z = z + 1
Next
End Sub

Sub Test2()
   Dim z As Long: z = 2
   Dim objReference As Object
   For Each objReference In ThisWorkbook.VBProject.References
       Cells(z, 2) = objReference.fullpath
       z = z + 1
   Next
End Sub
Was passiert mit diesem Code in M_snb ?
Hallo snb

ich habe bei meinem PC immer wieder das Problem das er siich an Codeteilen aufhaengt die er nicht verdauen kann.

Dafür ist es mir gelungen durch umstricken einen lauffaehigen Code zu basteln der bei 1000 Daten bei 33 Sekunden liegt.  Ich habe noch eine Match Prüfung einbauen müssen, weil mir einfiel das laut Frager die Datensaetze nicht immer übereinstimmen. Das in der Quelle neue Daten sein können, die ich unten anhaengen sollte. Diese zusaetzliche Prüfung ist also notwendig, braucht aber wieder mehr Zeit als ein direkter 1.1. Array Vergleich.

Beim Array laden bin ich mir im Augenblick auch unsicher ob in deinem Code berücksichtigt wurde das die Quelldatei 52 Spalten hat, bis AZ, die Zieldatei aber nur 14, wovon 12 verglichen werden müssen. Eine Variante von mir war das Array mit Chosse für die genaue Spaltenauswahl zu verknüpfen, dauerte aber über 1 Minute. Mein Versuchb das Array über Union(Range) zu laden schlug fehl. Da wurden nur die ersten fünf  zusammenhaengenden Spalten geladen.  

Meine letzte und bis jetzt schnellste Idee war das Quellblatt in die Zieldatei kopieren, allie überflüssigen Spalten löschen, und dann den Array Bereich zu laden. Dann stimmen Quelle- und Zielspalten im Array 1:1 überein. Das ist bisher meine schnellste Lösung.

Was ich bei deinem ersten Code noch niicht verstanden habe ist die erste For Next Schleife nach der With Klammer, was die genau macht?? Und was der Befehl "scripting dicitionary" mit .Item und Appl.ication.Index genaue bewirkt?? Unklar sind mir auch in der zweiten For Next Schleife die Befehle "exists" und "item"?? Weil ich unter sq=.Item  sp als ganzes Array verstehe, aber es sich dahinter bei sp(j, 1) nur um eine Zelle handeln kann. Die gesamte Array Materie ist mir noch ein grosses Raetsel. 

Ich bedanke mich aber auf jeden Fall das ich durch deine Hilfe die Laufzeit des ersten Makros von über 2 Minuten auf 33 sek. reduzieren konnte. Da die Prüfung sehr aufwendig bleibt, nicht 1.1. möglich ist, wird es m.E. immer lange Laufzeiten geben. Die lassen sich irgendwo nicht mehr verringern.    

mfg Gast 123

Code:
     With CreateObject("scripting.dictionary")
        For j = 2 To UBound(sn)
            .Item(Format(sn(j, 1))) = Application.Index(sn, j)
        Next
   
        For j = 2 To UBound(sp)
            If .exists(Format(sp(j, 1))) Then
               sq = .Item(Format(sp(j, 1)))
               For jj = 3 To UBound(sp, 2)
Für Dictionaries, schau mal: https://www.snb-vba.eu/VBA_Dictionary.html
Hallo snv

Sorry das ich mich bisher rnicht gemeldet habe, hatten heute den ganzen Tag kein Internet.

Bei dem letzten Beispiel laeuft der Code in Sheet2 sehr schnell, der in Sheet1 ist dagegen langsam. Bei nur 30 Daten in Quelle waren beide sofort fertig. Als ich Quelle und Ziel 1:1 mit 1000 Daten gleichsetzte brauchte das eine Makro über 2 Minuten, das andere kam auf 43 Sekunden. (Time in Zellen notiert)

Was bei beiden nicht funktioniert ist die farbliche Markierung bei Differenzen! Liegt das an meinem PC???  Obwohl in der Zelle Werte mit "2001_" Zeichen stehen!  Dazu kam mir noch eine Idee, die ich aber nicht umsetzen konnte.  Wenn du in Zellen das "_" Zeichen anhaengst, könnte man dann den Zellwert nicht gegen den Wert der Quelle Tabelle austauschen.  Das habe ich leider nicht hinbekommen, verstehe noch zu wenig von deiner Technik mit ".Items". Dann könnte man nach dem farblichen markieren mit Replace alle "_" Zeichen löschen! 

Vielen Dank für deine Hilfe.

mfg Gast 123
Das farblich markieren gescheht mirt conditional formatting (bedingte formatierung).
Du kannst im neu erstelltes Arbeitsblatt kontrolieren welche CF es gibt.

Hallo snb

Danke  und Ende in diesem Thread.

mfg Gast 123
Seiten: 1 2