Frage von DavidK, 93

VBA-Script - Kommentartext finden und Zelle durch bedingte Formatierung einfärben?

Ich suche ein VBA-Script mit deren Hilfe ich einen Bereich in meiner Tabelle nach einem Kommentar durchsucht, der den Inhalt von Zelle XY enthält. Die Zellen, sollen dann durch bedingte Formatierung eingefärbt werden. (Damit in Zelle XY dann etwas anderes reingeschrieben werden kann und die bedingte Formatierung darauf eingeht.)

Kann mir da jemand weiterhelfen? Ich versuche soetwas mit der Aufzeichnungsfunktion hinzubekommen, aber das klappt nicht!

Danke!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Suboptimierer, Community-Experte für Excel, 37

Wie ich das sehe, beschränkt sich das Problem darauf, dass man mit Excelfunktionen schwer an die Kommentare heran kommen kann.

Hierfür würde ich einfach deiner persönlichen Makrosammlung eine Funktion hinzufügen, die den Kommentar auslesen kann. Beispiel:

Function Kommentar(Optional rZelle As Range)
  Kommentar = ""
  If rZelle Is Nothing Then _
    Set rZelle = Application.Caller
  If Not rZelle.Comment Is Nothing Then _
    Kommentar = rZelle.Comment.Text
End Function

Als nächstes muss nur noch eine bedingte Formatierung festgelegt werden. Wenn das Suchwort in A1 steht und die Kommentare in den Zellen darunter: 

=UND(Kommentar()<>"";ISTZAHL(FINDEN($A$1;Kommentar())))
Expertenantwort
von Oubyi, Community-Experte für Excel, 65

Schauen wir erst mal, ob ich Dich bis hierher richtig verstanden habe.
Es wird erstmal nur nach dem Kommentar gesucht und eine Messagebox: "formatieren" ausgegeben.
Wenn DAS so bei Dir klappt, kümmern wir uns danach ums formatieren.
Dazu würde ich vorschlagen die Zelle direkt zu formatieren, also nicht über Bedingte Formatierung, aber dafür das Makro als eine Ereignis-Makro laufen zu lassen:(

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

), das nur aufgerufen wird, wenn sich der Wert in XY ändert.

Aber hier erstmal der Code mit der MsgBox:

Sub Kommentare()
Dim Text As String
Dim Zelle As Range
Dim Bereich As Range
Set Bereich = Range("B1:B20") 'ANPASSEN Suchbereich
Dim Quelle As Range
Set Quelle = Range("A1") 'ANPASSEN Deine Zelle XY

For Each Zelle In Bereich
On Error Resume Next
Text = Zelle.Comment.Text
On Error GoTo 0
If Text = Quelle.Value Then
MsgBox Zelle.Address & ": formatieren"
End If
Text = ""
Next Zelle
End Sub
Kommentar von DavidK ,

...die Antwort darunter kannst du ignorieren bzw. nicht ganz. Die diversen MsgBoxen kamen natürlich dadurch zustande, dass ich den zu prüfenden Zellinhalt gelöscht habe. Und die Mappe hatte natürlich viele leere Zellen. Sowas sollte dann natürlich vermieden werden.

Kommentar von DavidK ,

Die Anwort habe ich löschen lassen, weil ich da Unsinn geschrieben habe. Aber ich habe unendlich viel MsgBoxen bekommen. ;) Sobald was in der Zelle steht, findet er auch die richtigen zellen im Suchbereich. Wenn die jetzt alle eingefärbt werden würden, hätte ich meine Lösung!

Kommentar von Oubyi ,

Was hältst Du dann von meinem Vorschlag für eine feste Formatierung und ein Ereignismakro.
Weißt Du, wie das funktioniert?
Zum Beispiel mit diesem Code im Modul des Tabellenblattes (Rechtsklick auf den Tabellenreiter (unten, da wo z.B. Tabelle1 steht) und dann auf "Code anzeigen...")

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
'"A1" anpassen für Dein XY
Dim Text As String
Dim Zelle As Range
Dim Bereich As Range
Set Bereich = Range("B1:B20") 'ANPASSEN Suchbereich

For Each Zelle In Bereich
On Error Resume Next
Text = Zelle.Comment.Text
On Error GoTo 0
If Text = Target.Value Then
Zelle.Interior.ColorIndex = 4
Else: Zelle.Interior.ColorIndex = xlNone
End If
Text = ""
Next Zelle
End If
End Sub
Kommentar von Iamiam ,

Falls Oubyi heut nicht mehr reinschaut:

anstatt der MSBbox den Befehl:

Zelle.Interior.Color = RGB(0, 255, 255): Zelle.Font.Color = RGB(192, 0, 192)

Farben natürlich nach Deiner Wahl, die Befehle für ggf. Rahmenlinien-Arten und -Stärken, Schriftarten und Schriftgrößen musst Du Dir selbst suchen, am besten durch Aufzeichnen mit dem µ-Recorder.

(Der : macht aus 2 Zeilen eine)

Kommentar von DavidK ,

Vieen Dank, das habe ich gesucht! ;)

Kommentar von Oubyi ,

Gern geschehen ☼

Expertenantwort
von Iamiam, Community-Experte für Excel, 38

formal zur Ermöglichung einer Hilfreichsten.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten