Díky za tipy!
Kontrola v cyklu je klasika. Hledal jsem něco fikaného, jednoduššího. Mohla by to být fce MATCH(), kdyby se nemusel spracovat err. Je tam pak ještě o jeden řádek více než v cyklu a je to pomalejší. I tak moc díky.
Mohla by to být fce MATCH(), kdyby se nemusel spracovat err. Je tam pak ještě o jeden řádek více než v cyklu a je to pomalejší.
Dovolil bych si oponovat, osobne neznam rychlejsi zpusob nalezeni polozky v poli nez pomoci funcke Match
Pripravil sem pro nazornost vzorovy sesit, ve kterem jsou nejake vymyslene jmena a na radku
100, 1000, 10000, 15001 jsou neduplicitni jmena ktera jsem dal vyhledat. V kodu jsem pak menil tuto cast
Kód VBA
CoHledat = Cells(100, "A").Value
kde cislo 100 sem pote nahradil cislem 1000 a pak 10 000 a nakonec 15 001 a vzdy byla funkce Match rychlejsi.
Sesit je v priloze a kod pro porovnani rychlosti davam i primo sem
Kód VBA
Sub Porovnej()
Dim CyklusStart AsDouble
Dim CyklusKonec AsDouble
Dim MatchStart AsDouble
Dim MatchEnd AsDouble
Dim CoHledat AsString
Dim IndexPolozky AsLong
Dim LastRow AsLong
Dim ProhledavanaOblast As Range
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
' najde jmeno firmy na stem radku, vyzkousejte zadat 1000 10000 a 15 001
CoHledat = Cells(100, "A").Value
CyklusStart = Timer
For i = 2To LastRow
If Cells(i, "A").Value = CoHledat Then
IndexPolozky = i
ExitFor
EndIf
Next i
CyklusKonec = Timer
IndexPolozky = 0
MatchStart = Timer
Set ProhledavanaOblast = Range("A2", Cells(LastRow, "A"))
Nikdy neni tak zle, aby nemohlo byt jeste hur :-)
Office 2007 EN & Office 2003 CZ & Office 2000 EN & Office 2010 EN
Premek přiložil(a) následující soubor: porovani_cyklu_vs_match.zip
Upravil Premek, 19.07.2010 13:20
Jednalo se o hledání v POLI, ne v OBLASTI.
Vložil jsem Tvou Oblast do Pole a porovnal, viz.příloha:
kp57 přiložil(a) následující soubor: testcyklmatch.zip
K tomu ještě komentář nebo věc, na kterou jsem narazil (teď od boku, snad nebudu plácat) - lze použít Worksheetfunction.Match ale i Application.Match a dává se mu přednost (mám pocit, že právě kvůli chybě při nenalezení). Jinak z těch řádků kp57 trochu cítím jeden velký omyl - čím víc řádků kódů, tím pomalejší makro - typicky pro API funkce tohle nemusí být vůbec pravda a mám za to, že žádný cyklus nebude rychlejší než vestavěná vyhledávácí funkce. Jinak jak jsem psal, vyhledávací funkce lze použít i na primitivním poli, že ji Přemek ukázal na oblasti, je věc jiná. Apropo, ten "error" je opravdu jen jeden řádek navíc (no možná dva).
ad excel napsal:
K tomu ještě komentář nebo věc, na kterou jsem narazil (teď od boku, snad nebudu plácat) - lze použít Worksheetfunction.Match ale i Application.Match a dává se mu přednost (mám pocit, že právě kvůli chybě při nenalezení)..
Zkousel sem oboje a oba vraceji chybu pri vetsim poli nez tech 65 536 zaznamu.
Nasel sem o tom i diskuzi 5 dnu starou a taky jsou z toho celi spatni ... :-(
Nikdy neni tak zle, aby nemohlo byt jeste hur :-)
Office 2007 EN & Office 2003 CZ & Office 2000 EN & Office 2010 EN