Excel VBA - Umkehrfunktion, und alle Zeilen nach Begriff durchsuchen?

4 Antworten

Willst du VBA üben oder eine gute/schnelle Lösung deines Problems?

für letzteres: mit einer Hilfsspalte, einer einfachen Formel und Aktivierung des Autofilters gehts schnell und dynamisch.

Wenn deine Daten in Spalte A ab A2 stehen, dann diese Formel (in zB B2) für den Begriff "aa":

=ISTFEHLER(SUCHEN("aa";$A$2:$A$9;1))*1

runterziehen bis Ende Einträge oder weiter.

Spalte B filtern nach 0 (wenn aa vorhanden) oder nach 1 (alle, wo aa fehlt)

Das geht schnell, ohne die mit VBA verbundenen nervigen Warnmeldungen (oder sogar Sperren wg. VBA-Verbots in zB einigen Firmen-Netzwerken) und aktualisiert sich bei jeder Änderung sofort. (VBA dauert lang und muss nach jeder Änderung neu durchlaufen!)

Anm: anstatt des Begriffs "aa" kannst du natürlich auch einen $Bezug setzen und die $9 kannst du beliebig, zB. als $99999, wählen. (habs nur am kleinen Beispiel probiert, da gehts auf Anhieb). Das *1 könntest du auch weglassen und müsstest dann nach FALSCH/WAHR filtern.

Musst du Gross/klein unterscheiden, dann mit FINDEN anstatt SUCHEN bei gleicher Syntax.

Viel Erfolg!

Hallo,

du könntest das machen:
Columns("A:A").Select

   Selection.Find(What:="a", After:=ActiveCell, LookIn:=xlFormulas, LookAt _

       :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _

       False, SearchFormat:=False).Activate

dann überprüfst du, ob etwas gefunden würde wenn ja dann lässt du einfach die ActiveCell in eine andere Tabelle schreiben die Du natürlich vor jedem neuen suchen wieder Intizallisierst.

Dann lässt du weiter suchen mit diesem Befehl:

  Selection.FindNext(After:=ActiveCell).Activate

dann prüfst du wieder ob etwas gefunden wurde.

das alles würde ich in eine schleife machen die solange durchlaufen wird, bis es keine Suchergebnisse mehr gibt. Wobei das erste mit Selection.Find nur beim ERSTEN mal ausgeführt werden soll.

Hoffe ich konnte deine 2 Probleme damit lösen.

Gruß

Dennis

Erst einmal: Wenn Du hier Code veröffentlichst, nutze bitte die Option "Quelltext", so wie ich. Dann fallen zumindest die Leerzeilen weg.

Ich habe jetzt mal eine Code geschrieben, der möglichst nah an Deinem Entwurf bleibt um nicht zu sehr zu verwirren. Schau mal, ob Dir das hilft:

Sub Suche_Click()
Dim i As Integer 'Fehlt bei Dir
Dim x As String
Dim Z As Long 'Sicherheitshalber bei Zeilen immer "long"
Dim temp As Integer

On Error GoTo ErrorHandler  'Um das Screenupdating auf jeden Fall wieder auf True zu setzen
Application.ScreenUpdating = False 'Beschleunigt das Ganze

Z = Sheets(1).UsedRange.Rows.Count
x = "TestBegriff" 'Geändert um besser testen zu können
temp = 0

ActiveSheet.Rows.Hidden = False  'Alles einblenden
ActiveSheet.Rows.Interior.ColorIndex = xlColorIndexNone 'Color löschen

For i = Z To 2 Step -1 'Rückwärts wg. Ausblenden
  If Cells(i, 1) = x Then
    ActiveSheet.Rows(i).Interior.ColorIndex = 6
    temp = 1
  Else:
  ActiveSheet.Rows(i).Hidden = True
  End If
Next
If temp = 0 Then
  MsgBox "Belegnummer nicht vorhanden. Bitte prüfen Sie ihre Eingabe."
  ActiveSheet.Rows.Hidden = False  'Alles einblenden
End If

ErrorHandler:
Application.ScreenUpdating = True
End Sub

Teste erstmal mit weniger Daten, denn ich befürchte für 76000 Zeilen wird das, trotzt des ausgeschalteten Screenupdatings sehr lange laufen.

Wenn das nicht vertretbar ist, müsste man das Ganze vielleicht über ein Array regeln, aber da traue ich mich nicht so richtig ran.
Vielleicht findet sich da ein anderer Experte, der schon Schnipsel hat.

Oder man nutzt die derDennis vorgeschlagene FIND-Methode.

P.S.: Das markieren könnte man evtl. auch über eine Bedingte Formatierung erreichen, das Ausblenden allerdings nicht. Da wäre dann wiederum ein Filter möglich, nachdem man in einer Hilfsspalte Markierungen gesetzt hat.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

Bei so vielen Zeilen dauert die bisherigen Lösungen bestimmt lange ?!
In einem solchen Fall aktiviere ich den Autofilter.
Klickt man das Dreieck kann man einen beliebigen Text eingeben, der dann in der Spalte gesucht wird. Diesen Vorgang kann man auch programmieren, wenn nötig.
Aus meiner Sicht ist also kein VBA nötig. Sondern nur AutoFilter und Texteingabe.

Bild zum Beitrag

 - (Computer, Microsoft Excel, VBA)