Das letzte Clever-Excel-Forum.de - Treffen
fand vom 15. - 17. September 2017 in Friedrichroda /
Thüringen / Region Großer Inselsberg statt.

Optimaler Code für eine Suchfunktion
#1
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.
to top
#2
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
Gruß Stefan
Win 7 / Office 2007
to top
#3
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.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
to top
#4
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.
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste