Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
724to728
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
724to728
724to728
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Code-Optimierung: Suche sehr langsam

Code-Optimierung: Suche sehr langsam
03.02.2006 19:45:05
Martin
Hallo,
die Zeilen unten tun, was sie sollen, aber sehr langsam.
Jeder Tipp, mit dem ich diese Suche beschleunigen kann, hilfe!
Besten Dank,
Martin

Sub SuchenLAAANGSAMMM()
For t = 1 To 2000
Wert = Worksheets("Tabelle1").Cells(t, 1)
For w = 1 To 500
Vergleich = Worksheets("Tabelle2").Cells(w, 1)
If Wert = Vergleich Then Worksheets("Tabelle1").Cells(t, 3) = "Gefunden"
If Wert = Vergleich Then If Worksheets("Tabelle1").Cells(t, 2) <> Worksheets("Tabelle2").Cells(w, 2) Then Worksheets("Tabelle2").Cells(w, 3) = "Fehler!"
Next w
' Fehlermeldung, wenn Wert aus Tabelle1 nicht in Tabelle2 gefunden
If Worksheets("Tabelle1").Cells(t, 3) <> "Gefunden" Then Worksheets("Tabelle1").Cells(t, 3) = "Nicht gefunden"
Next t
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code-Optimierung: Suche sehr langsam
03.02.2006 20:25:13
Uduuh
Hallo,
schau dir doch mal die Find-Methode an.
Gruß aus’m Pott
Udo

AW: Code-Optimierung: Suche sehr langsam
03.02.2006 20:27:28
Achim
Hi,
macht irgendwie keinen Sinn 2000 Werte in 500 Werten zu suchen.
Mach es genau anders herum, Schleife über die 500 Werte, suchen mit der Find-Methode
in den 2000 Werten.
mfg Achim
AW: Code-Optimierung: Suche sehr langsam
03.02.2006 20:44:47
Ramses
Hallo
Beide Code's in ein neues Modul und dann mal vergleichen
Option Explicit

Private Declare Function GetTickCount Lib "kernel32" () As Long

Sub SuchenLAAANGSAMMM()
    'Original etwas übersichtlicher dargestellt
    'Eine IF-Prüfung weniger
    Dim prcStart As Long, prcEnd As Long
    prcStart = GetTickCount
    Dim t As Long, w As Long
    Dim Wert As Variant, Vergleich As Variant
    For t = 1 To 2000
        Wert = Worksheets("Tabelle1").Cells(t, 1)
        For w = 1 To 500
            Vergleich = Worksheets("Tabelle2").Cells(w, 1)
            If Wert = Vergleich Then
                Worksheets("Tabelle1").Cells(t, 3) = "Gefunden"
                If Worksheets("Tabelle1").Cells(t, 2) <> Worksheets("Tabelle2").Cells(w, 2) Then
                    Worksheets("Tabelle2").Cells(w, 3) = "Fehler!"
                End If
            End If
        Next w
        ' Fehlermeldung, wenn Wert aus Tabelle1 nicht in Tabelle2 gefunden
        If Worksheets("Tabelle1").Cells(t, 3) <> "Gefunden" Then Worksheets("Tabelle1").Cells(t, 3) = "Nicht gefunden"
    Next t
    prcEnd = GetTickCount
    MsgBox "Dauer Langsam: " & prcEnd - prcStart
End Sub

Sub Suchen_Schnell()
    'by Ramses
    Dim prcStart As Long, prcEnd As Long
    prcStart = GetTickCount
    Dim Wert As Variant
    Dim i As Integer
    Dim qWks As Worksheet
    Dim tarWks As Range, tarRng As Range, findRng As Range
    Set qWks = Worksheets("Tabelle1")
    Set tarWks = Worksheets("Tabelle2")
    Set tarRng = tarWks.Range("A1:A500")
    For i = 1 To 2000
        Wert = qWks.Cells(i, 1)
        With tarRng
            On Error Resume Next
            Set findRng = .Find(Wert, LookIn:=xlValues)
            If findRng Is Nothing Then
                qWks.Cells(i, 3) = "Gefunden"
                If qWks.Cells(i, 2) <> tarRng.Offset(0, 1) Then
                    tarRng.Offset(0, 3) = "Fehler!"
                End If
            End If
            On Error GoTo 0
        End With
    Next i
    Set qWks = Nothing
    Set tarWks = Nothing
    Set tarRng = Nothing
    Set findRng = Nothing
    prcEnd = GetTickCount
    MsgBox "Dauer Langsam: " & prcEnd - prcStart
End Sub



Gruss Rainer
Anzeige
Modifikation...
03.02.2006 20:52:34
Ramses
Hallo
Achim hatte da noch eine gute Idee.
Mal probieren,... ich hoffe ich habs richtig umgesetzt
Sub Suchen_Schnell_modified()
    'by Ramses
    Dim prcStart As Long, prcEnd As Long
    prcStart = GetTickCount
    Dim Wert As Variant
    Dim i As Integer
    Dim qWks As Worksheet
    Dim tarWks As Range, tarRng As Range, findRng As Range
    Set qWks = Worksheets("Tabelle2")
    Set tarWks = Worksheets("Tabelle1")
    Set tarRng = tarWks.Range("A1:A2000")
    For i = 1 To 500
        Wert = qWks.Cells(i, 1)
        With tarRng
            On Error Resume Next
            Set findRng = .Find(Wert, LookIn:=xlValues)
            If findRng Is Nothing Then
                tarRng.Offset(0, 2) = "Gefunden"
                If tarRng.Offset(0, 1) <> qWks.Cells(i, 2) Then
                    qWks.Cells(i, 3) = "Fehler!"
                End If
            End If
            On Error GoTo 0
        End With
    Next i
    Set qWks = Nothing
    Set tarWks = Nothing
    Set tarRng = Nothing
    Set findRng = Nothing
    prcEnd = GetTickCount
    MsgBox "Dauer schnell modified: " & prcEnd - prcStart
End Sub

Gruss Rainer
Anzeige
AW: Code-Optimierung: Suche sehr langsam
03.02.2006 22:23:55
EtoPHG
Hallo alle,
Höre auf die Vorschläge und versuch Ramses Makro, aber.........

Sub SortierenSchneller()
'...Dim Deklarationen
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'.... Der Code (von Dir oder besser von Ramses)
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Gruss Hansueli

286 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige