SQLkerdes Creative Commons License 2010.11.20 0 0 13326

Sziasztok,
Valaki nézzen már rá erre a kódra, mert valami itt nagyon nem stimmel, csak nem tudok rájönni, h mi.
Alapprobléma:

- van egy worksheet-em (Source) ami kb 50 ezer sort tartalmaz, elég komoly redundancivál (sok a (közel) azonos sor);

- bizonyos okokból szükségem van minden egyedi sor három adatára, ezeket egy másik worksheet-re (Target) szeretném átiratni.
Amit csináltam:

- Advanced Filterrel előállítottam azt a listát, amely a Source-on lévő adatok egyedi azonosítóit tartalmazza (hívjuk ezt LoanNumber-nek)

- Minden a Target-en meglévő LoanNumber mellé ki szeretném írni az adott hitel bizonyos adatait (fiók, hitelügyintéző, stb).

- A probléma megoldására a Range.Find metódust akartam alkalmazni, vagyis hogy a Target minden egyes során végig megyek és az éppen aktuális LoanNumber-t Find paranccsal megtalálom a Source táblában, majd a talált cellától jobbra x cellával lévő adatot kiírom a Target táblába

 

A kód lényegi része:

 

For lTargetActualRow = 2701 To 2800    

sContractNr2Find = wsTarget.Cells(lTargetActualRow, 1).Value    

Set rFoundCell = rLoanNrCells.Find(What:=sContractNr2Find, After:=wsSource.Cells(2, 1), LookIn:=xlValues _        , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _        MatchCase:=False, SearchFormat:=False)    

wsTarget.Cells(lTargetActualRow, 2) = rFoundCell.Offset(0, iIssuedAmount).Value     wsTarget.Cells(lTargetActualRow, 3) = rFoundCell.Offset(0, iBranch).Value     wsTarget.Cells(lTargetActualRow, 5) = rFoundCell.Offset(0, iLoanOfficer).Value

Next 

A kód működik hiba nélkül, de úgy tűnik, hogy nagyon lassan.
Százas adagokra felosztottam a kikeresendő (kb 30 ezer egyedi LoanNumber-t) (ezért látszik hogy a for 2701 és 2800 között lépeget) és azt látom, hogy folyamatosan lassul a kód végrehajtása, olyannira, hogy mostmár a fenti ciklus több mint 100 másodperc (!) alatt fut le!
Van bárkinek bármilyen ötlete, hogy ez mitől lehet?
A rLoanNrCells range az A1:A51000 tartománynak felel meg.
Én a Find valamelyik paraméterére gyanakszom, de nem ismerem annyira, hogy megoldjam ezt a problémát, amit meg eddig próbáltam az nem műxik.
A megoldandó feladat és a Source tábla sokkal összetettebb annál, hogy más megoldást válasszak, szóval ne más megoldást javasoljatok, hanem a fenti kód javítására tegyetek javaslatot lécci.
Előre is köszi!