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

VBA - Suchschleife optimieren (.find ?)

VBA - Suchschleife optimieren (.find ?)
30.05.2016 11:59:42
René
Hallo zusammen,
gibt es einen kürzeren und vlt. schnelleren code für folgende Suchschleife
(im Netz bin ich bisher nicht so richtig fündig geworden)?
Sub suchen()
Dim ws As Worksheet
Dim col As Integer, i As Integer
Set ws = ThisWorkbook.Worksheets("Sheet1")
col = 5
With ws
For i = 7 To .Cells(Rows.Count, col).End(xlUp).Row
If .Cells(i, col) = .Cells(7, 1).Value Then
.Cells(i, col + 1).Value = "Found"
End If
Next i
End With
End Sub

Beste Grüße
René

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 12:36:05
Nepumuk
Hallo,
teste mal:
Option Explicit

Public Sub suchen()
    Dim objCell As Range
    Dim strFirstAddress As String
    With ThisWorkbook.Worksheets("Sheet1").Columns(5)
        Set objCell = .Find(What:=.Cells(7, 1).Value, _
            LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
        If Not objCell Is Nothing Then
            strFirstAddress = objCell.Address
            Do
                objCell.Offset(0, 1).Value = "Found"
                Set objCell = .FindNext(After:=objCell)
            Loop Until objCell.Address = strFirstAddress
            Set objCell = Nothing
        End If
    End With
End Sub

Gruß
Nepumuk

Anzeige
AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 12:48:37
René
Hey Nepumuk,
danke für die Programmzeilen.
Es läuft genau einmal durch und liefert mir beim ersten Eintrag in der betr. Spalte (=.cells(7,1)) ein Ergebnis/den Eintrag "Found".
Der Suchbegriff wird also nicht verglichen bzw. danach gesucht und an allen Stellen in der betr. Spalte mit "Found" markier.

AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 12:57:05
Nepumuk
Hallo,
mein Fehler. So geht's:
Option Explicit

Public Sub suchen()
    Dim objCell As Range
    Dim strFirstAddress As String
    With ThisWorkbook.Worksheets("Sheet1")
        Set objCell = .Columns(5).Find(What:=.Cells(7, 1).Value, _
            LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
        If Not objCell Is Nothing Then
            strFirstAddress = objCell.Address
            Do
                objCell.Offset(0, 1).Value = "Found"
                Set objCell = .Columns(5).FindNext(After:=objCell)
            Loop Until objCell.Address = strFirstAddress
            Set objCell = Nothing
        End If
    End With
End Sub


Gruß
Nepumuk

Anzeige
AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 13:08:34
René
vielen Dank Nepumuk. der code funktioniert jetzt.

AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 12:46:41
Daniel
Hi
warum nicht eine Formel einsetzen?
folgende Formel in F7 bis Datenende:
=Wenn(E7=$A$7;"Found";"")
geht natürlich auch als Makro:
Sub suchen()
Dim ws As Worksheet
Dim col As Integer
Col = 5
With ws
With .Range(.Cells(7, col + 1), .Cells(.Rows.count, col).end(xlup).Offset(0, 1))
.FormulaR1C1 = "=IF(RC" & col & "=R7C1,""Found"","""")"
.Formula = .Value
End with
end with
End Sub
Gruß Daniel

AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 12:51:33
René
Danke Daniel für den Hinweis.
Die Idee mit der Formel hatte ich auch schon. Allerdings habe ich die Befürchtung, dass die Tabelle ziemlich langsam wird, wenn vlt. viele Formeln eingetragen werden.
Oder wie verhält sich die Performance in den beiden Fällen?

Anzeige
AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 12:57:10
René
...richtig schnell scheint es auf alle Fälle zu sein. sieht nicht schlecht aus. Danke Daniel!

AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 13:03:49
Daniel
Hi
das ist verdammt schnell, denn.
1. werden in jeder Formel nur zwei einfache Zellwerte mit einander verglichen, das geht ratzfatz.
im Prinzip wäre es daher auch nicht notwendig, die Formeln durch die Werte zu ersetzen.
2. beschreibst du alle Zellen gleichzeitig (einmal mit der Formel, einmal mit dem Ergebniswert), dh die Aktionen, die Excel ausführen muss wenn sich ein Zellwert ändert (Bildschirm ändern, überprüfen ob irgendwo in einer geöffneten Excelmappe Formeln vorhanden sind, die sich auf diese Zellen beziehen und neu berechnet werden müssen) können für alle Zellen "in einem Aufwasch" abgearbeitet werden und nicht für jede Zelle einzeln.
ist im Prinzip so wie wenn du in deinem Haus die Fenster renovieren lässt.
Wenn du jedes Fenster einzeln nach einander beauftragst, dann fallen für jedes Fenster die Fahrt- und Bürokostenpauschale an.
Wenn du alle Fenster zu einem Auftrag zusammenfasst, dann gibst nur einmal Fahrt- und Bürokosten.
Gruß Daniel

Anzeige
AW: VBA - Suchschleife optimieren (.find ?)
30.05.2016 13:09:13
René
Sehr anschaulich erklärt. Vielen Dank.
Ich würde sagen, für meine Module habe ich endlich die perfekte Methode gefunden.
Traumhaft!

AW: VBA - Suchschleife optimieren (.find ?)
31.05.2016 14:20:14
René
Servus,
aufbauend auf meiner Frage gestern und den super Rückmeldungen hier muss ich leider nochmal _ fragen, warum im folgenden Code im unteren

Set objcell = Columns(ProtocolHeadlineColResponsible).FindNext(After:=objcell)
als Resultat nach dem ersten richtigen Ergebnis u. zugehöriger Aktion ein nothing entsteht und die Schleife nicht weiter ausgeführt wird.
Hat jemand eine Idee?
Irgendwie spielt es wohl eine Rolle, dass ich in die Spalten weiter rechts Werte zum ersten Ergebnis eintrage.
        Set objcell = .Columns(ProtocolHeadlineColResponsible).Find(What:= _
TextBoxEmployeeAbbreviation.Value, _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
If Not objcell Is Nothing Then
strFirstAddress = objcell.Address
Do
'currentAddress = objcell.Address
v = Range(objcell.Address).Row
With .Range(.Cells(v, ProtocolHeadlineColResponsible + 7), .Cells(v,  _
ProtocolHeadlineColResponsible + 12)) '.Select
.FormulaR1C1 = "=1+1"
.Formula = .Value
End With
'.Range(currentAddress).Activate
Set objcell = .Columns(ProtocolHeadlineColResponsible).FindNext(After:=objcell)
On Error Resume Next
Loop Until objcell.Address = strFirstAddress
Set objcell = Nothing
End If

Anzeige
AW: VBA - Suchschleife optimieren (.find ?)
31.05.2016 17:14:07
Nepumuk
Hallo,
solange du die Zellen in der Suchspalte nicht änderst nicht nachvollziehbar. Kannst du mal eine Mustermappe mit ein paar Spieldaten hochladen in der ich das testen kann.
Gruß
Nepumuk

AW: VBA - Suchschleife optimieren (.find ?)
01.06.2016 08:55:54
René
Guten Morgen Nepumuk,
es ist wie verhext. Ich habe aus meiner Struktur und den zusammenhängenden Programmteilen den _ betr. code extrahiert. Nur "leider" kommt es hier nicht zum Fehler. Ich lasse nämlich das Blatt in welchem gesucht und dann etwas geschrieben wir noch via

Worksheet_Change
kontrollieren. Hier kommt es aktuell zum Fehler.
Daher bin ich noch auf der Suche, woran des liegt. Wenn ich etwas gefunden habe und es inkl. Fehler extrahieren kann lade ich es hier noch hoch oder ich konnte den Fehler dann hoffentlich allg. lösen.
Gruß
René

Anzeige
AW: VBA - Suchschleife optimieren (.find ?)
01.06.2016 11:13:38
René
also Problem gelöst. im Teil der das Blatt kontrolliert wurden zwei weitere Makros aufgerufen die zwar keinen direkten Einfluss auf den Inhalt des Blatts haben aber dennoch die Schleife unterbrochen haben. jetzt habe ich einen anderen Weg gefunden u. Bug gelöst.
danke dennoch Nepumuk für die angebotene Hilfe!

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige