Clever-Excel-Forum

Normale Version: Optimaler Code für eine Suchfunktion
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe VBA Experten,

im Rahmen einer Informatikaufgabe sollen u.a. auf einem Tabellenblatt nacheinander alle Zellen gefunden werden in denen das Wort "Buchungssatz" steht.

Alle Fundstellen sollen dann in einer Textbox aufgelistet werden.

Dafür habe ich eine Userform mit folgendem (voll funktionsfähigem) Code programmiert:

Code:
Sub CommandButton5_Click()
Dim vbS As String
TextBox2.MultiLine = True
Range("A1").Select

Cells.Find(What:="Buchungssatz", After:=ActiveCell).Activate
vbS = ActiveCell.Address

Do
TextBox2.Text = TextBox2.Text & ActiveCell.Value & vbNewLine
Cells.FindNext(After:=ActiveCell).Activate
If ActiveCell.Address = vbS Then Exit Do
Loop

End Sub

Der Code soll dabei so effizient wie möglich geschrieben werden, d.h. je weniger Programmierzeilen um so besser.

Der Lehrer meint,  mein Code ginge noch viel effektiver. Ich frage mich wie?!

Vielen Dank für eure Hilfe im voraus.
Hallo,

du könntest auf das Selektieren verzichten, weniger Codezeilen werden es wohl nicht.

Code:
Sub CommandButton5_Click()
   Dim vbS As String
   Dim rngTreffer As Range
  
   TextBox2.MultiLine = True
   'Range("A1").Select
  
   Set rngTreffer = Cells.Find(What:="Buchungssatz", LookIn:=xlValues, lookat:=xlWhole)
   If Not rngTreffer Is Nothing Then
      vbS = rngTreffer.Address
      
      Do
         TextBox2.Text = TextBox2.Text & rngTreffer.Value & vbNewLine
         Set rngTreffer = Cells.FindNext(rngTreffer)
      Loop While rngTreffer.Address <> vbS
   End If
End Sub
Hallo Schülerin,

steht das Wort eventuell nur in einer Spalte?
Hast Du in Zeile 1 Überschriften?

Wenn Du beide Fragen mit ja beantworten kannst, könnte das eine Alternative sein:

Code:
   Range("A1").AutoFilter Field:=1, Criteria1:="Buchungssatz"
   TextBox2.Text = Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlVisible).Address
Wenn das Wort in zwei oder mehr Zellen direkt untereinander steht, wird ein Zellbereich ausgegeben.
Nach den beiden Zeilen könntest Du noch den Autofilter zurücknehmen.
Hallo liebe Leute,

ich glaub ich liege mit meinem Code gar nicht mal so sehr daneben.
Aber vielen Dank für eure Mühe und eure Vorschläge.
Mal sehen was der Pauker sagt.