Clever-Excel-Forum

Normale Version: Suche Zellen und farblich markieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Einen schönen guten Morgen,
ich hoffe ihr könnt mir etwas helfen. Ich habe ein Tabelle erstellt mit einer Suche Funktion welcher dann die Zellen farblich markiert. Funktioniert soweit gut allerdings würde ich es gerne erweitern und da komm ich nicht weiter da mir hier die VBA Kenntnisse fehlen.

Es sind 2 Tabellenblätter wo gesucht und markiert wird. Nun müsste in Tabelle1 der Wert der in Spalte B gefunden wurde ein anderer Wert in Spalte D ausgelesen (gleiche Zeile) werden und auch gleichzeitig auf beiden Tabellenblättern automatisch gesucht und markiert werden.
Geht sowas? Auch wäre es schön wenn Groß und Kleinschreibung bei der Suche nicht beachtet wird.

Hier mal der Code den ich habe für die Suche und Markierung:

Code:
Sub suchen()
'in Spalte A nach einem Namen suchen
'die Zeilen farblich markieren und
'die Anzahl der Treffer anzeigen

Dim suche As String
Dim z As Long
Dim Zelle As Range
Dim Blatt As Worksheet

suche = InputBox("wonach wollen Sie suchen?")

'den Zähler für die Treffer zu Beginn auf Null stellen
z = 0
'hier ändern falls eine andere Spalte durchsucht werden soll


'wenn keine Eingabe in InpuBox erfolgte wird abgebrochen
If suche = "" Then Exit Sub

   For Each Blatt In ActiveWorkbook.Worksheets
  For Each Zelle In Blatt.UsedRange
       'wenn die Zelle den gesuchten Wert enthält:
        If InStr(1, Zelle.Text, suche) Then
       'dann den Zähler um eins erhöhen
        z = z + 1
       'und die Zelle gelb markieren
        Zelle.Interior.ColorIndex = 3
        End If
    Next Zelle
Next Blatt

MsgBox suche & " wurde " & z & " mal gefunden."
End Sub
Sub sauber()
ThisWorkbook.Worksheets("Sackware").Cells().Interior.ColorIndex = xlColorIndexNone
[F20].Activate
End Sub

mfg Daniel
Hallöchen,

das mit der Schreibweise bekommst Du hin, indem Du z.B. beides im code auf groß oder klein setzt.

If InStr(1, Ucase(Zelle.Text), Ucase(suche)) Then

Das mit der Spalte D bedarf noch einer Überlegung. Man könnte es so programmieren, dass sich das Makro rekursiv selbst wieder aufruft, dann mit dem Begriff aus D. Allerdings sucht es dann nach einem Treffer erneut nach dem Begriff aus der neuen Trefferzeile aus D und macht das so lange, bis nix mehr getroffen wird. Im schlimmsten Fall läuft das aber endlos, wenn z.B. ein Begriff schon mal in einer vorangehenden Suche dran war.

Die andere Variante wäre, dass bei der "D-Begriff-Suche" bei einem Treffer nicht aus dieser Zeile der nächste D-Begriff gesucht wird.
Hallo André,

vielen Dank für die Hilfe.

Kann man hier evtl. mit einer 2. Abfrage prüfen wenn Zelle rot markiert (weil gefunden) dann nimm den Wert(Bsp. "1-R2-P3") aus Spalte D (gleiche Zeile) und suche den auf dem Tabellenblatt 2 und markiere den auch rot?

Grüße
Daniel
Hallo Daniel,

im Moment gehst Du ja durch jedes Blatt und prüfst dann die Begriffe in jeder einzelnen Zelle im genutzten Bereich. Wenn Du den Begriff z.B. in Tabelle1 findest, markierst Du die Zelle. Du könntest nun gleich nach dem Markieren mit dem Begriff aus Spalte D in die Tabelle2 gehen und dort suchen.

Wenn Du dann mit Tabelle1 durch bist kommt das Gleiche ja noch auf Tabelle2. Willst Du dort bei einem Treffer den Begriff aus D auf Tabelle1 suchen?

Wenn Du nur zwei Blätter hast würde ich es auch etwas anders programmieren. Ich würde den Suchcode auslagern


Code:
Private Sub Suchen(wsBlatt1 as worksheet, wsBlatt2 as worksheet, suche as String)
For  Each Zelle1 In Blatt1.UsedRange
       'wenn die Zelle den gesuchten Wert enthält:
        If InStr(1, Zelle1.Text, suche) Then
       'dann den Zähler um eins erhöhen
        z = z + 1
       'und die Zelle gelb markieren
        Zelle1.Interior.ColorIndex = 3
        For  Each Zelle2 In Blatt2.UsedRange
          If InStr(1, Zelle2.Text, Blatt1.Cells(Zelle1.Row,4).Value) Then
            'dann den Zähler um eins erhöhen
             'z = z + 1
             'und die Zelle gelb markieren
             Zelle2.Interior.ColorIndex = 3
          End If
        Next Zelle2
        End If
Next Zelle1
End Sub


In Deinem ersten Sub machst Du dann statt der Suche den Aufruf

Call Suchen sheets("Tabelle1"),sheets("Tabelle2"),suche
Call Suchen sheets("Tabelle2"),sheets("Tabelle1"),suche

also 1x mit Tabelle 1 und für D dann Tabelle 2 und 1x dann anders herum. Ist jetzt nur hier geschrieben und nicht ausgetestet, es fehlt auch noch die Verarbeitung von z. Da gibt es dann nämlich die nächste Frage - soll nur das eigentliche Suchwort gezählt werden oder auch die aus D ...
...