Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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.
Antwortento 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
Antwortento 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)
Antwortento 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.
Antwortento top


Gehe zu:


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