Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


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


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Suchfunktion erweitern AndyExcel77 2 78 16.01.2017, 11:19
Letzter Beitrag: AndyExcel77
Exclamation Sammlung mit Suchfunktion bayrer 5 128 31.12.2016, 13:37
Letzter Beitrag: schauan
  Suchfunktion mit mehreren Ergebnissen Pelegrinoides 4 80 27.12.2016, 16:52
Letzter Beitrag: BoskoBiati
  Ich suche eine Formel die bei falschen Wert eine 1 anzeigt biosprofi 3 116 15.12.2016, 23:11
Letzter Beitrag: biosprofi
  List Box zur Suchfunktion erweitern AndyExcel77 8 146 14.12.2016, 19:58
Letzter Beitrag: Steffl
  Suchfunktion mit List Box erweitern AndyExcel77 7 134 14.12.2016, 08:32
Letzter Beitrag: AndyExcel77
  Mit Suchfunktion ins passende Tabellenblatt? Melor 2 94 07.12.2016, 08:42
Letzter Beitrag: Melor
  Bestimmte Suchfunktion in Excel erstellen Excell 4 126 29.11.2016, 15:51
Letzter Beitrag: Excell
  VBA Suchfunktion andywww2 8 286 23.11.2016, 17:11
Letzter Beitrag: Gast 123
Lightbulb VBA Zeile in eine Arbeitsmappe kopieren wenn in der Zeile eine 1 steht Olossos 8 234 11.11.2016, 17:08
Letzter Beitrag: Kuwer

Gehe zu:


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