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.

Suche Zellen und farblich markieren
#1
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
Antwortento top
#2
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.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#3
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
Antwortento top
#4
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 ...
...
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top


Gehe zu:


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