Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

find Aufruf auf dynamische Range

Forumthread: find Aufruf auf dynamische Range

find Aufruf auf dynamische Range
27.08.2003 11:56:05
Alex
Hallo erstmal,

ich hab da ein kleines Problem,bzw das Anliegen ein bestehendes Makro zu beschleunigen.

erstmal mein Code:


Sub AllIn_Rohstoffpreise_GLOBAL()
Dim artnr As String
Sheets("Tabelle1").Select
Range("a22").Select
Do Until (ActiveCell = "EOF")
artnr = ActiveCell
preis = Selection.offSet(0, 4)
Sheets("Tabelle2").Select
Range("g:g,dc:dc").Select
With Selection
Set found = .Find(what:=artnr, lookat:=xlWhole)
foundfirst = found.Address
If Not found Is Nothing Then
Do
found.Activate
found.offSet(0, 5) = preis
Set found = .FindNext(found)
Loop While found.Address <> foundfirst
Else
End With
End If
End With
Sheets("Tabelle1").Select
Selection.offSet(1, 0).Select
Loop
End Sub


Folgendes: in einer Tabelle ( 65000 Zeilen und ein paar Zerquetschte mal 2 Spalten) enthalten sich wiederholende Nummern(insgesamt ca 360 unterschiedliche).Nun würde ich gern bereits abgearbeitete Nummern aus der Range herrausnehmen. Das sollte am besten gleich nach dem .find(what:=artnr,lookat:=xlWhole) Aufruf geschehen.

Momentan dauert das ganze 42 Minuten auf einem P4 2,2.

vielen Dank im Vorraus,Gruß Alex
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: find Aufruf auf dynamische Range
27.08.2003 12:01:45
K.Rola
Hallo,

was hat das für einen Sinn:

Do
found.Activate'----das ist gemeint?
found.offSet(0, 5) = preis
Set found = .FindNext(found)
Loop While found.Address <> foundfirst

Was passiert mit der aktivierten Zelle, das ist in deinem Code
nicht ersichtlich.

Gruß K.Rola
Anzeige
AW: find Aufruf auf dynamische Range
27.08.2003 12:12:04
Alex
der Code tut folgendes

- Aktiviere die Zelle deren Eintrag mit dem Suchbegriff übereinstimmt
- 5 Zellen links von der eben aktivierten Zelle schreibe den Preis (vorher gegeben)
- setzte das found Objekt auf findnext(found) also suche weiter bis zum nächsten Treffer
- und Schlussendlich : tue das ganze Solang bis die Adressen der aktuellen und der vorhergagangenen Suche gleich sind, dann nämlich findet er wieder den 1. Suchtreffer
Anzeige
AW: find Aufruf auf dynamische Range
27.08.2003 12:17:03
K.Rola
Hallo,

um den Wert zu schreiben ist es nicht nötig, die Zelle zu aktivieren,
das macht deinen Code so langsam. Lass das found.Activate einfach weg.

Gruß K.Rola
AW: find Aufruf auf dynamische Range
27.08.2003 12:25:50
Alex
Dankeschön.

Hast du auch ne Idee wie man den Suchbereich so verändern,dass jemehr Suchbegriffe abgearbeitet wordensind,desto kleiner wird der Suchbereich.Also
Zb. suche alles zw. 1 und 400 auf der ganzen Range,dann nach dem die ersten 50 gefunden worden sind,suche 51-400 auf der Range, exklusive der Bereiche die schon durchsucht und gefunden wurden ?
Anzeige
AW: find Aufruf auf dynamische Range
27.08.2003 12:34:40
K.Rola
Hallo,

die Find- Methode ist so extrem schnell, dass du den Unterschied
nich merken würdest. Wenns immernoch zu langsam ist, liegts
daran auf keinen Fall.

Lad die Datei ggf. hoch.

Gruß K.Rola
AW: find Aufruf auf dynamische Range
27.08.2003 12:51:50
alex
Hmmm... die Datei hochladen ist schwierig :)

ich werd das gleich mal ausprobieren und meld mich in spätestens 42 minuten wieder.

gruss alex.
Anzeige
AW: find Aufruf auf dynamische Range
27.08.2003 13:24:53
alex
50 % bessere Laufzeit ... WOW

1000 Dank,Karola

Gruss Alex
AW: find Aufruf auf dynamische Range
27.08.2003 14:32:43
K.Rola
Hallo,

du kannst das noch beschleunigen:


Sub Strickmuster()
Dim oldState As Long
With Application
oldState = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
On Error GoTo ENDE
''Hier dein Code
ENDE:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = oldState
End With
End Sub

Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige