Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1268to1272
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
Inhaltsverzeichnis

.find langsam

.find langsam
Heinzs
Hallo Excelfreunde,
mit folgendem Code suche ich Einträge in einem anderen Sheet. Aktuelles Sheet hat 50000 Zeilen, Sheet OPs aktuell hat 40.000 Zeilen.
Die Sucherei dauert mehr als 1 h, gibt es Verbesserungsmöglichkeit?
e1 = 50000
Application.ScreenUpdating = false
For i1 = 2 To e1
Sheets("OPs aktuell").Select
If i1 Mod 100 = 0 Or i1 = e1 Then
Application.StatusBar = "OP Listennr. ermitteln, Datensatz " & Format(i1, "0000000") & " von " & Format(e1, "0000000") & " Endzeit = " & Anfangszeit1 + (Now() - Anfangszeit1) / i1 * e1
DoEvents
End If
gn_belegnr = Cells(i1, 9)
'Listennr, Listenhistorie, Übertragunsdatum ermitteln
Sheets("Protokolldaten").Select
gn_liste = ""
gn_listenhistorie = ""
gn_uebertragungsdatum = ""
With Range("e:e")
Set c = .Find(gn_belegnr, LookIn:=xlValues)
If Not c Is Nothing Then
y = c.row
gn_liste = Cells(y, 3)
gn_listenhistorie = Cells(y, 8)
gn_uebertragungsdatum = Cells(y, 4)
Sheets("OPs aktuell").Select
Cells(i1, 25) = gn_liste
Cells(i1, 26) = gn_listenhistorie
Cells(i1, 27) = gn_uebertragungsdatum
End If
End With
Next i1
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
Danke für Hilfe!
MfG Heinz

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: .find langsam
04.07.2012 18:04:04
Josef

Hallo Heinz,
wenn du das nächste mal Code postest, dann bitte komplett und mit deklarierten Variablen, anderenfalls schau ich ihn mir gar nicht mehr an!
Die SatusBar verschlingt viel Zeit, außerdem das Herumgehopse zwischen den Tabellen und das Schreiben in die Zellen.
Probier mal folgende Variante (ungetestet!).
Sub heinz()
  Dim rng As Range
  Dim vntResult As Variant
  Dim lngE1 As Long, lngI1 As Long
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
  End With
  
  lngE1 = 50000
  Redim vntResult(1 To lngE1, 1 To 3)
  
  For lngI1 = 2 To lngE1
    If lngI1 Mod 100 = 0 Or lngI1 = lngE1 Then
      Application.StatusBar = "OP Listennr. ermitteln, Datensatz " & Format(lngI1, "0000000") & " von " & Format(lngE1, "0000000") & " Endzeit = " & Anfangszeit1 + (Now() - Anfangszeit1) / lngI1 * lngE1
      DoEvents
    End If
    'Listennr, Listenhistorie, Übertragunsdatum ermitteln
    With Sheets("Protokolldaten")
      Set rng = .Range("E:E").Find(Sheets("OPs aktuell").Cells(lngI1, 9), LookIn:=xlValues, _
        LookAt:=xlWhole, MatchCase:=False)
      
      If Not rng Is Nothing Then
        vntResult(lngE1, 1) = .Cells(rng.Row, 3)
        vntResult(lngE1, 2) = .Cells(rng.Row, 8)
        vntResult(lngE1, 3) = .Cells(rng.Row, 4)
      End If
    End With
  Next
  
  Sheets("OPs aktuell").Cells(2, 25).Resize(UBound(vntResult, 1), UBound(vntResult, 2)) = vntResult
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'heinz'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Modul - Modul1"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
    .DisplayAlerts = True
    .StatusBar = False
  End With
  
  Set rng = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: .find langsam
05.07.2012 12:43:19
Heinzs
Hallo Sepp,
danke für Hilfe, ich habe ein paar Ideen aus deinem Code übernommen; es ist deutlich schneller geworden. BTW: Ich deklariere keine Variablen, aber sorry daß es dadurch zu Irritationen kam...
Nochmals vielen Dank!
MfG Heinz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige