Verklaring gezocht voor lange verwerkingstijd

Status
Niet open voor verdere reacties.

keb

Gebruiker
Lid geworden
20 feb 2011
Berichten
133
In bijgevoegd bestand bevindt zich het tabblad "Personen"; in kolom A bevinden zich ID's. (het aantal ID's kan oplopen tot enkele honderdduizenden).

Als ik handmatig zoek op "22761" vind ik het record in een flits.
Met de opgenomen macro (in dit bestand ingesloten) kost dit 5,39 s.

Vraag: Hoe is dit te verklaren?


Feitelijk ben ik zoek naar een snelle methode om met behulp van een macro te zoeken naar een ID, om vervolgens alle persoonsgegevens door te geven aan parameters.

Ik ben er achter gekomen dat de zoektijd met FIND sterk afhankelijk is van het aantal records op een tabblad.
Wie heeft nuttige tips?
 

Bijlagen

  • Test_19mei.xlsm
    1,4 MB · Weergaven: 41
vooral voor heel kleine tijdsmetingen is deze chronometer enkel indicatief
Eigenlijk zoek je de rij waar iets staat, dus een gewone match is al sneller dan die find
Code:
Sub Macro2()
'
' Macro2 Macro
'
   Sheets("Personen").Activate
   StartTime = Timer
   Columns("A:A").Select
   Selection.Find(What:="22761", After:=ActiveCell, LookIn:=xlValues, _
                  LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                  MatchCase:=False, SearchFormat:=False).Activate
   MsgBox "Ouders opzoeken kost " & CStr(Timer - StartTime) & " s   "

   [COLOR="#0000FF"]StartTime = Timer
   i = Application.Match(22761, Sheets("personen").Range("A1").CurrentRegion.Columns(1), 0)
   MsgBox "Ouders opzoeken kost " & CStr(Timer - StartTime) & " s   "
   If IsNumeric(i) Then MsgBox "het staat in de " & Format(i, "#,###0") & "de lijn"[/COLOR]

End Sub
En ja bij mij kost de 1e tijd is van 80 msec, de 2e is van 10 msec, maar zoals gezegd puur indicatief.
 
Daarnaast zou je je code kunnen wijzigen in dit:
Code:
Sub Macro2()
StartTime = Timer
    Sheets("Personen").Range("A:A").Find(What:="22761", After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
MsgBox "Ouders opzoeken kost " & CStr(Timer - StartTime) & " s   "
End Sub
 
23 sec voor 7.100 rijen (natte vinger 300 rijen per sec = 600 opzoekingen, want een koppel)
 

Bijlagen

  • Test_19mei.xlsm
    1,4 MB · Weergaven: 41
Laatst bewerkt:
Met VBA is het 1 honderdste seconde in jouw bestand.

Code:
Sub M_snb()
    t1 = Timer
    c00 = Sheets("Personen").Columns(1).Find("22763").Offset(, 3)
    MsgBox "Ouders " & c00 & " opzoeken kost " & Timer - t1
End Sub
 
@snb, dan is mijn computer 6 keer trager dan die van jouw. Zonder die select zit ik op 65 ms.
Ofwel draait er veel ballast op de achtergrond.

@TS, heb je al iets kunnen doen met #5 ?
 
@cow18

Je hebt toch geen 12 anti-virusprogramma's lopen ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan