Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
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

Laufzeit

Laufzeit
01.12.2020 14:58:05
Ptonka
Hallo zusammen,
ich habe folgendes Problem. Zwei Excel-Sheets ("User" und "Daten") in einer Datei.
Das Sheet "User" enthält ca. 26.500 Datensätze in ca. 14 Spalten.
Eine Spalte (C) enthält eine Kennung (okemon), welche in im anderen Blatt "Daten" in Spalte "D" suche und
wenn ich sie dort gefunden habe, kopiere ich aus dessen Zeile ein paar andere Daten in das
Blatt "User" zurück.
Einzige Unwägbarkeit ist, dass die zu suchende Kennung in dem Blatt "Daten" zwar in Spalte D steht
aber dort mit einigen anderen Daten kommasepariert hinterlegt ist - z.B steht in einer Zeile "user123, user456, user789".
Gesucht wird aber nur eines davon. Daher kommt ein simpler Sverweis nicht in Frage.
Per Makro suche ich nun in der Spalte D nach dem entsprechenden Wert (=okemon) und übernehme dann, wenn er
gefunden wird, die benötigten Daten.
Leider/komischerweise läuft dieses Makro (eigentlich sind es zwei) unendlich lang. hat jemand ene Idee, was ich da
performancemäßig optimieren kann?
Vielen Dank im Voraus,
Hier die beiden Makros:
Public okemon, ESSID, andere, Mail, KID, revoked As String
Sub all_names_User()
Application.ScreenUpdating = False
Sheets("User").Select
LZ1 = [C65536].End(xlUp).Row
For i = 2 To LZ1
Sheets("User").Select
okemon = Cells(i, 3).Value
Call Suche_okemon
Sheets("User").Select
Cells(i, 4).Value = revoked
Cells(i, 5).Value = ESSID
Cells(i, 6).Value = andere
Cells(i, 7).Value = Mail
Cells(i, 8).Value = KID
Next i
Application.ScreenUpdating = True
MsgBox "Fertig!"
End Sub
'***********************************************
Sub Suche_okemon()
Sheets("Daten").Select
Columns("D:D").Select
On Error GoTo nächste1
Selection.Find(What:=okemon, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ESSID = Cells(ActiveCell.Row, 2).Value
andere = Cells(ActiveCell.Row, 4).Value
Mail = Cells(ActiveCell.Row, 10).Value
KID = Cells(ActiveCell.Row, 11).Value
revoked = Cells(ActiveCell.Row, 16).Value
GoTo schluss1
nächste1:
ESSID = ""
andere = ""
Mail = ""
KID = ""
revoked = ""
schluss1:
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ansatz
01.12.2020 16:19:08
Fennek
Hallo,
wenn ich das richtig verstanden habe, könnte es so gehen:
- Schleife in "User" über alle Zeilen
- pro Zeile wird die Kennung mit Range.Find im Blatt "Daten" gesucht (xlPart)
- aus der Zeile in "Daten" werden alle Infos nach "User" übertragen
Sollte auch bei 26.000 Zeilen in wenigen Minuten gehen.
mfg
AW: Laufzeit
01.12.2020 16:25:08
peterk
Hallo
Select und Activate fressen Zeit
Probier mal (ungetestet):

Public ESSID As String
Public andere As String
Public Mail As String
Public KID As String
Public revoked As String
Sub all_names_User()
Dim LastRow As Long
Dim i As Long
Application.ScreenUpdating = False
With Worksheets("User")
LastRow = .Cells(.Rows.Count, 3).End(xlUp).Row
For i = 2 To LastRow
Call Suche_okemon(.Cells(i, 3).Value)
.Cells(i, 4).Value = revoked
.Cells(i, 5).Value = ESSID
.Cells(i, 6).Value = andere
.Cells(i, 7).Value = Mail
.Cells(i, 8).Value = KID
Next i
End With
Application.ScreenUpdating = True
MsgBox "Fertig!"
End Sub
Sub Suche_okemon(okemon As String)
Dim myRow As Long
ESSID = ""
andere = ""
Mail = ""
KID = ""
revoked = ""
With Worksheets("Daten")
On Error GoTo nichtsGefunden
myRow = .Columns(4).Find(What:=okemon, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
ESSID = .Cells(myRow, 2).Value
andere = .Cells(myRow, 4).Value
Mail = .Cells(myRow, 10).Value
KID = .Cells(myRow, 11).Value
revoked = .Cells(myRow, 16).Value
End With
nichtsGefunden:
On Error GoTo 0
End Sub

Anzeige
AW: Laufzeit
01.12.2020 17:38:41
onur

For i = 2 To LZ1

UND
Columns("D:D").Select
Selection.Find...

bedeutet, dass dein Code, wenn LZ1 z.B. 1000 wäre, 1000 mal das 2 Makro aufruft, das wiederum jedesmal über 1.000.000 Zellen durchsucht - macht über 1 Milliarde Suchvorgänge.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige