Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
748to752
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ausführungszeit

Ausführungszeit
25.03.2006 08:34:05
andS
Hi,
wie kann ich das optimieren:
Sheets("Daten").Select
For k = 7 To 150
temp = Cells(12, k).Value
For o = 1 To 150
If temp = Sheets("Temp").Cells(o, 1).Value Then
Cells(CInt(inp), k).Value = Sheets("Temp").Cells(o, 3).Value
End If
Next o
Next k
inp ist die Zeilennr, die ich mir über eine Inputbox hole.
Habe das gefunden:
http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0105.shtml
Komme damit aber nicht ganz klar. Es schreibt mir nicht dahin, wo ich will...
Wer kann mir helfen? Die 2 for-Schleifen sind etwas lahm...
Gruß Andi

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ausführungszeit
25.03.2006 09:23:56
Ramses
Hallo
Eine Frage sollte so beschrieben sein:
1. Was willst du erreichen (?????)
2. Welchen Code verwendest du (ist vorhanden)
3. Was funktioniert nicht (?????)
Dann wird es auch für uns einfacher :-)
Gruss Rainer
AW: Ausführungszeit
25.03.2006 09:31:58
andS
Hi,
danke für die Antwort ;-)
Hier mal die genaue Beschreibung:
1. die Ausführungszeit verbessern
2. ich verwende den eingefügten Code
3. er läuft, ist halt langsam
Habe das jetzt so gelöst:
Dim avarArray(1 To 150) As Variant
For k = 7 To 150
temp = Cells(12, k).Value
For o = 1 To 150
If temp = Sheets("Temp").Cells(o, 1).Value Then
'Cells(CInt(inp), k).Value = Sheets("Temp").Cells(o, 3).Value
avarArray(k) = Sheets("Temp").Cells(o, 3).Value
End If
Next o
Next k
For u = 7 To UBound(avarArray)
Cells(CInt(inp), u) = avarArray(u)
Next u
Ich wollte das Bsp(Link) verwenden, um die Ausführungsgeschwindigkeit des Makros zu erhöhen, da die Cells-Methode etwas langsam war(wegen der 2 for-Schleifen).
Gruß Andi
Anzeige
AW: Ausführungszeit
25.03.2006 09:36:30
Ramses
Hallo
Mit "Was willst du erreichen" dachte ich eigentlich eher an eine Beschreibung wie deine Tabelle aufgebaut ist und was du haben willst.
Ich muss mir nun anhand deines Codes, der langsam und anscheinend fehlerhaft ist ("...Es schreibt mir nicht dahin, wo ich will......"), herausfinden was du erreichen willst.
Wo kommt denn plötzlich das Array her ?
Anyway, .. mangels Kenntnis deines Tabellenaubaus mal hier eine Variante
Option Explicit

Sub Optimized()
    Dim srcWks As Worksheet, srcArea As Range, fndRange As Range
    Dim tarWks As Worksheet
    Dim tmpAddress As String
    Dim colStart As Integer, colEnd As Integer, chkRow As Long
    Dim i As Integer, inpRow As Long
    'Hier sollen die Daten hin
    Set tarWks = Worksheets("Daten")
    'Von hier kommen die Daten
    Set srcWks = Worksheets("Temp")
    'Suchbereich in der Tabelle wo die Daten herkommen
    Set srcArea = srcWks.Range("A1:A150")
    '=Schleifenzähler
    colStart = 7
    colEnd = 150
    'Aus welcher Zelle sollen die Daten gesucht werden
    chkRow = 12
    'On Error Resume Next
    'In welche Zeile sollen die Daten geschrieben werden
    inpRow = Cint(InputBox("In welche Zeile sollen die Daten", "Schreibe...", 5))
    If Not IsNumeric(inpRow) Then
        MsgBox "Falsche Zeile angegeben"
        Exit Sub
    End If
    '**************************************
    'Nichts mehr ändern ab hier
    For i = colStart To colEnd
        With tarWks
            'Sucht nach dem Begriff auf volle Übereinstimmung
            Set fndRange = srcArea.Find(what:=.Cells(chkRow, i), LookIn:=xlValues, lookat:=xlWhole)
            'Wenn gefunden...
            If Not fndRange Is Nothing Then
                '... eintragen in die Zelle
                .Cells(inpRow, i) = fndRange.Offset(0, 2).Value
            End If
        End With
    Next i
End Sub

Gruss Rainer
Anzeige
AW: Ausführungszeit
25.03.2006 09:41:39
andS
Hi,
der Aufbau wäre zu komplex gewesen. Mir gings nur um die Ausführungsgeschwindigkeit...
Der Link(erster Post) beschreibt die Nutzung eines Datenfeldes(Array) im Vergleich zur Cells-Methode. Daher das Array! Ok, ich geb's zu, hab mich nicht ganz richtig ausgedrückt... ;-)
Der Code mit dem Array läuft. Wollte halt anstelle der Cells-Methode, einen Array verwenden, damit mein Makro schneller läuft.
Gruß Andi
AW: Ausführungszeit
25.03.2006 09:45:28
Ramses
Hallo
Im Vergleich zur Cells-Methode ist die Find-Methode um Welten schneller.
Im Vergleich zur Array-methode werden die Unterschiede nicht so ins Gewicht fallsen.
Gruss Rainer
Anzeige
AW: Ausführungszeit
25.03.2006 09:47:42
andS
Hi,
da muss ich leider wiedersprechen: der Code läuft jetzt wesentlich schneller!!
Grüße Andi
AW: Ausführungszeit
25.03.2006 09:55:10
Ramses
Hallo
Mit dem Unterschied meinte ich die Array-Methode im Vergleich zur Find-Methode.
Mal am Rande:
Wieso hast du die Frage überhaupt gestellt ?
Gruss Rainer
AW: Ausführungszeit
25.03.2006 10:03:39
Ramses
Hallo
Ich habe mir deinen Code mit dem Array nochmals angesehen .
Deine Aussage "...der Code läuft jetzt wesentlich schneller!!.." möchte ich mal in Frage stellen.
Zudem ist der Code nicht stabil.
Wenn weniger als 7 gefundene Werte in deinem Array stehen "kracht" es ;-) und du kriegst gar keine Werte zurück.
Gruss Rainer
Anzeige
AW: Ausführungszeit
26.03.2006 11:34:52
andS
Hi,
ja die Frage hatte ich mir dann selber gelöst...
Was muss ich an dem Array ändern, wegen der 7 Werte?? Ist zwar unwahrscheinlich, aber dennoch.
Wäre nett, wenn du mir helfen könntest.
Danke+Gruß Andi
For u = 7 To 7 + UBound(avarArray) o.w.T.
26.03.2006 11:47:14
Ramses
...
AW: For u = 7 To 7 + UBound(avarArray) o.w.T.
26.03.2006 11:52:59
andS
Nochmals: Danke!!
Grüße Andi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige