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.

gibt es einen schnelleren code?
#11
(23.05.2017, 19:04)Gast 123 schrieb: Diese Sache verstehe ich wirklich nicht!  Ich habe diese Programmierweise damals aus Beispielen von DataBecker übernommen und es hat 20 Jahre problemlos funktioniert.  Im Augenblick verstehe ich den technischen Unterschied nicht wenn man hinten noch Cells anhaengt.  Was soll das Technisch bewirken??   Das ist mir einfach nicht klar.
Es hat etwas mit dem Objektmodell jeder modernen Programmiersprache zu tun.
Man greift sich den Parent und nach Bedarf den Child.
Range() ist erst mal ein unglaublich vielfältiges Object, welches durch .Cells() zum Glück eingeschränkt wird.
Was Du machst, ist die Aufgabenverteilung an den Compiler, der erfahrene Programmierer macht dies selbständig.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#12
(23.05.2017, 19:04)Gast 123 schrieb: Krtiki soll ja bewirken das man seine Fehler erkennt, nur bin ich im Augenblick wirklich -sehr verwirrt- weil das bisher immer so geklappt hat.

Guckst Du z.B.: Default: Kleines Wort - Grosse Wirkung
Antworten Top
#13
Hallo

ich dachte nisher immer ich haette gutes Wissen.  Es ist sehr schockierend wenn man begreifen muss das man fast nichts weiss.  Als triebe man ohne Schwimmweste mitten im Atlantik ... Muss Pause machen

frohes Schaffen für euch.

mfg  Gast 123
Antworten Top
#14
herzlichen Danke für eure Hilfe, zumindest wurde der code verkürtzt. ja ich bin Neuling in VBA, ich denke es liegt daran dass ich den noch "viel zu genau" schreibe. aber ich bring mir vb rein über Google und learning by doing bei... das mit Arrays kapier ich ums verrecken ned :D
Antworten Top
#15
Hallöchen,

das mit den Arrays ist eigentlich gar nicht so kompliziert. Stell Dir einfach nur einen Zellbereich vor und sag Array dazu Smile Eine Spalte oder Zeile wäre dann ein eindimensionales Array, hast Du mehrere Zeilen und / oder Spalten, dann wäre es ein zweidimensionales Array. Genau wie Du eine Zelle z.B. mit Cells(1,2) adressierst, bewegst Du Dich in einem Array. Erst wenn man etwas tiefer in die Problematik eindringt könnte es etwas komplizierter werden. Mit Zellen geht einiges einfacher als mit Arrays, na ja, und Arrays können oder haben nicht alles, was bei Zellen möglich ist Sad Dafür geht aber einiges schneller ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#16
Hallon rotzi,

was willst du denn kopieren?

Durch die Nutzung von arrays und dictionary sollte:


a) wenn du nur die Werte kopieren willst, ein Geschwindigkeitfaktor > 100 möglich sein.
b) wenn du Formeln oder Formate kopieren willst, ein Geschwindigkeitfaktor > 10 möglich sein.



ps. wenn du nur Werte kopieren willst habe ich noch die Frage:
Sind in den Spalten A:C im Blatt "All" auch nur Werte?
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#17
Schau mal:

http://www.snb-vba.eu/VBA_Arrays_en.html
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#18
Hallo rotzi,

hier einmal eine  Version falls nur Werte kopiert werden sollen und auch sonst in Spalte C des Blattes "All" keine 'Formeln sind:

Code:
Sub Tuwat()
Dim lngZeile1 As Long
Dim lngZeile2 As Long
Dim varMAT1 As Variant
Dim varMAT21 As Variant
Dim varMAT23 As Variant
Dim wkb As Workbook
Dim wks As Worksheet
Dim varDict As Object

Dim dblTime As Double

Set varDict = CreateObject("Scripting.Dictionary")
With Application
    .Calculation = xlCalculationManual
    .EnableEvents = False
    .ScreenUpdating = False
End With

dblTime = Timer
With Worksheets("Arbeitsblatt").Range("G14:G98")
    .Value = .Value
    .NumberFormat = "0"
End With

Set wkb = Workbooks.Open("D:\Tools\Data.xlsm")
Set wks = wkb.Sheets("All")
varMAT1 = Workbooks("Test.xlsm").Worksheets("Arbeitsblatt").Range("G14:H98")
varMAT21 = wks.Range("A2:A132690")
varMAT23 = wks.Range("C2:C132690")

For lngZeile1 = 1 To UBound(varMAT1, 1)
    If varMAT1(lngZeile1, 1) <> "" Then
        varDict(varMAT1(lngZeile1, 1)) = varMAT1(lngZeile1, 2)
    End If
Next lngZeile1
For lngZeile2 = 1 To UBound(varMAT21, 1)
    If varDict.exists(varMAT21(lngZeile2, 1)) Then
        varMAT23(lngZeile2, 1) = varDict(varMAT21(lngZeile2, 1))
    End If
Next lngZeile2
wks.Range("C2:C132690") = varMAT23

With Application
    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
End With
Application.StatusBar = "Done! within  " & Timer - dblTime & " sek"
Workbooks("Data.xlsm").Close False
End Sub

Dass macht eine Beschleunigung vom Faktor ~ 450.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#19
holy moly vielen dnak, ja sind nur werte :)

ich werde es mir mal ansehen und komm wohl nicht drum arrays zu lernen ^^
Antworten Top
#20
Moin Helmut!
Nur eine Ergänzung zu Deinem Code, auch weil Du die Geschwindigkeit ansprichst:
.Value = .Value ist langsam!
Nimm statt dessen .Copy: .PasteSpecial xlPasteValues

Falls Du mir nicht glaubst ;):
Ich habe mal eine Testumgebung aufgebaut, damit man dies auch merkt.
16.384.000 Zellen mit =ZUFALLSZAHL() gefüllt und beide Methoden gegenübergestellt:

Sub Value_vs_PasteSpecial()
Dim Start&
Application.ScreenUpdating = False
With Range("A1:XFD1000")
   Call Fill_It
   Start = Timer
   .Copy: .PasteSpecial xlPasteValues
   Debug.Print Timer - Start
   Call Fill_It
   Start = Timer
   .Value = .Value
   Debug.Print Timer - Start
End With
End Sub
Sub Fill_It()
With Range("A1:XFD1000")
   .Clear
   .Formula = "=Rand()"
End With
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Das Direktfenster meldet mir:
Code:
3,125
19,09765625

.PasteSpecial ist mehr als sechsmal schneller.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


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