HERBERS Excel-Forum - das Archiv
Wortteil färben (Treffer rot)
Dirk

Hallo Euch allen,
mit untenstehendem Code suche ich nach einem Wortteil (Eingabe in B1).
Nun ist aber mein Problem, daß ich z.B. in B1 den Begriff "herb" eintrage und das Makro auch den Treffer "Herber" hervorheben soll - es soll also NICHT zwischen Groß- und Kleinschreibung unterschieden werden.
Wie ist der Code zu ändern?
Freue mich über jeden zielführenden Tipp!
Grüße
Dirk
Code im Tabellenblatt:
Option Explicit Sub treffer_rot() Dim rng As Range Dim i As Integer Dim SuBegr As String 'SuchBegriff Dim SuZeich As Long 'SuchZeichen (Anzahl) SuBegr = Range("b1").Value SuZeich = Len(SuBegr) For Each rng In Range("a2:z20") 'in A2:Z20 i = InStr(rng, SuBegr) If i > 0 Then ' rng.Characters(i, SuZeich).Font.Color = RGB(255, 0, 0) rng.Characters(i, SuZeich).Font.Color = vbRed rng.Characters(i, SuZeich).Font.Bold = True End If Next End Sub

AW: Wortteil färben (Treffer rot)
Beverly

Hi Dirk,
wandle alles in Großbuchstaben (oder Kleinbuchstaben) um:
    If InStr(UCase(rng), UCase(SuBegr)) > 0 Then


gelöst (UCase)
Dirk

Hallo Karin,
tausend Dank für Deinen Tipp, funktioniert prima !!!
Genau danach suchte ich, Du hast mir den Tag gerettet...
Grüße
Dirk

vbTextCompare
Rudi

Hallo,
i = InStr(rng, SuBegr, vbTextCompare)
Gruß
Rudi

AW: vbTextCompare
Dirk

Hallo Rudi,
i = InStr(rng, SuBegr, vbTextCompare)
oder
i = InStr(rng, SuBegr, 1)
liefern leider: Laufzeitfehler 5: Ungültiger Prozeduraufruf oder ungültiges Argument...
Kann das daran liegen, daß dieser Code nicht in einem eigenen Modul, sondern im Tabellenblatt steht?
Doch trotzdem vielen Dank für Deinen Vorschlag - ich bin mir sicher, ich setze ihn lediglich nicht richtig um. :-(
MfG
Dirk

geht bei mir auch nicht
Matthias

Hallo Dirk
Aber mal eine Frage
Bist Du sicher das Du mit dem Code das erreichst was Du willst?
Was ist z.B wenn in einer Zelle im Bereich
beherbergen steht?
oder
Jugendherberge?
Was kommt da bei Dir raus in den gelben Zellen?
Ich dachte Du willst dann "herb" markieren
Tabelle1

 ABC
1 herb 
2Herber.deHerbyJugendherberge
3HerbstHerbstloservollherb
4hartleichtschwer
5beherbergenHerbstanfangherbes Wetter


Excel Tabellen im Web darstellen >>
Excel Jeanie HTML 4

Bei mir das
beherbergen steht?
oder
Jugendherberge?
Gruß Matthias

funzt es jetzt ?
Dirk

Hallo Matthias,

danke für den Hinweis.
Nur dadurch bin ich auf diesen Makel gestoßen.
Habe das UCase daraufhin schon weiter oben im Code benutzt:
i = InStr(UCase(rng), UCase(SuBegr))
Zwar funktioniert es jetzt auch in dem von Dir geschilderten Fall, aber bitte frag' mich nicht, warum das so ist... Ich bin absoluter VBA-Laie.
Grüße
Dirk

ja klar ...
Matthias

Hallo
Nee, ich frag Dich nicht warum ;-)
So gehts ja dann auch:
Bereiche hatte ich zum Testen reduziert
Bitte wieder anpassen!
Karins Vorschlag:
Option Explicit
Sub treffer_rot()
Dim rng As Range
Dim i As Integer
Dim SuBegr As String    'SuchBegriff
Dim SuZeich As Long     'SuchZeichen (Anzahl)
SuBegr = Range("b1").Value
SuZeich = Len(SuBegr)
For Each rng In Range("A2:C5")  'in A2:C5
With rng
i = InStr(UCase(.Text), UCase(SuBegr))
If i > 0 Then
.Characters(i, SuZeich).Font.Color = vbRed
.Characters(i, SuZeich).Font.Bold = True
End If
End With
Next
End Sub
oder eben Rudis Vorschlag
Option Explicit
Sub treffer_rot()
Dim rng As Range
Dim i As Integer
Dim SuBegr As String    'SuchBegriff
Dim SuZeich As Long     'SuchZeichen (Anzahl)
SuBegr = Range("b1").Value
SuZeich = Len(SuBegr)
For Each rng In Range("A2:C5")  'in A2:C5
With rng
i = InStr(1, rng, SuBegr, vbTextCompare)
If i > 0 Then
.Characters(i, SuZeich).Font.Color = vbRed
.Characters(i, SuZeich).Font.Bold = True
End If
End With
Next
End Sub
Beides mal in ein With-Konstrukt eingebettet
Gruß Matthias

AW: vbTextCompare
Rudi

Hallo,
man muss den ersten Parameter auch angeben. Hab ich übersehen.
i = InStr(1,rng, SuBegr, vbTextCompare)
Gruß
Rudi

AW: vbTextCompare
Dirk

Hallo Rudi,
habe Deine Variante gerade auch nach Matthias' Hinweis getestet.
Und wie von Dir nicht anders zu erwarten, funktioniert es genau wie gewünscht !
Vielen Dank.
MfG
Dirk

mehrere Treffer in einer Zelle
Dirk

Hallo nochmal,
gerade bin ich über einen Sonderfall gestolpert, der allerdings häufiger vorkommt:
Der Suchbegriff (SuBegr) kann mehrmals in einer ZELLE (rng) stehen.
Momentan wird nur der !. Treffer hervorgehoben, also:
Suchbegriff: herb
Zellinhalt: In der Jugendherberge werden nicht nur Jugendliche beherbergt.
falsches Ergebnis: In der Jugendherberge werden nicht nur Jugendliche beherbergt.
gesuchtes Ergebnis: In der Jugendherberge werden nicht nur Jugendliche beherbergt.
Was muss an diesem Code geändert werden?
Option Explicit
Sub treffer_rot()
Dim rng As Range
Dim i As Integer
Dim SuBegr As String    'SuchBegriff
Dim SuZeich As Long     'SuchZeichen (Anzahl)
SuBegr = Range("b1").Value
SuZeich = Len(SuBegr)
For Each rng In Range("A2:C5")  'in A2:C5
With rng                                   'von Matthias L.
i = InStr(UCase(.TEXT), UCase(SuBegr))     'von Beverly
i = InStr(1, rng, SuBegr, vbTextCompare)   'von Rudi Maintaire
If i > 0 Then
.Characters(i, SuZeich).Font.Color = vbRed
.Characters(i, SuZeich).Font.Bold = True
End If
End With
Next
End Sub
Grüße
Dirk
OffTopic: Wie kann man hier im Forum Text rot darstellen?

AW: mehrere Treffer in einer Zelle
Rudi

Hallo,
dann musst du mit einer Schleife durch den Text.
Motto:
for i=1 to len(rng)-SuZeich+1
if lcase(mid(rng,i,SuZeich))=lcase(subegr) then
rng.Characters(i, SuZeich).Font.Color = vbRed
end if
next
Gruß
Rudi

AW: mehrere Treffer in einer Zelle
Dirk

Hallo Rudi,
danke Dir vielmals - PROBLEM GELÖST !!!
Hast Du noch einen Tipp oder Link zu meiner OffTopic-Frage?
MfG
Dirk

erledigt
Dirk

sorry, hab's gerade gefunden:
" < font color="#ff0000">rote Schrift< /font> "
oder
" < font color="red">rote Schrift< /font> "
(ohne Leerzeichen nach den KleinerAls-Zeichen
rote Schrift

Wortteil färben (Treffer rot)
Dirk

Hallo Euch allen,
mit untenstehendem Code suche ich nach einem Wortteil (Eingabe in B1).
Nun ist aber mein Problem, daß ich z.B. in B1 den Begriff "herb" eintrage und das Makro auch den Treffer "Herber" hervorheben soll - es soll also NICHT zwischen Groß- und Kleinschreibung unterschieden werden.
Wie ist der Code zu ändern?
Freue mich über jeden zielführenden Tipp!
Grüße
Dirk
Code im Tabellenblatt:
Option Explicit Sub treffer_rot() Dim rng As Range Dim i As Integer Dim SuBegr As String 'SuchBegriff Dim SuZeich As Long 'SuchZeichen (Anzahl) SuBegr = Range("b1").Value SuZeich = Len(SuBegr) For Each rng In Range("a2:z20") 'in A2:Z20 i = InStr(rng, SuBegr) If i > 0 Then ' rng.Characters(i, SuZeich).Font.Color = RGB(255, 0, 0) rng.Characters(i, SuZeich).Font.Color = vbRed rng.Characters(i, SuZeich).Font.Bold = True End If Next End Sub

AW: Wortteil färben (Treffer rot)
Beverly

Hi Dirk,
wandle alles in Großbuchstaben (oder Kleinbuchstaben) um:
    If InStr(UCase(rng), UCase(SuBegr)) > 0 Then


gelöst (UCase)
Dirk

Hallo Karin,
tausend Dank für Deinen Tipp, funktioniert prima !!!
Genau danach suchte ich, Du hast mir den Tag gerettet...
Grüße
Dirk

vbTextCompare
Rudi

Hallo,
i = InStr(rng, SuBegr, vbTextCompare)
Gruß
Rudi

AW: vbTextCompare
Dirk

Hallo Rudi,
i = InStr(rng, SuBegr, vbTextCompare)
oder
i = InStr(rng, SuBegr, 1)
liefern leider: Laufzeitfehler 5: Ungültiger Prozeduraufruf oder ungültiges Argument...
Kann das daran liegen, daß dieser Code nicht in einem eigenen Modul, sondern im Tabellenblatt steht?
Doch trotzdem vielen Dank für Deinen Vorschlag - ich bin mir sicher, ich setze ihn lediglich nicht richtig um. :-(
MfG
Dirk

geht bei mir auch nicht
Matthias

Hallo Dirk
Aber mal eine Frage
Bist Du sicher das Du mit dem Code das erreichst was Du willst?
Was ist z.B wenn in einer Zelle im Bereich
beherbergen steht?
oder
Jugendherberge?
Was kommt da bei Dir raus in den gelben Zellen?
Ich dachte Du willst dann "herb" markieren
Tabelle1

 ABC
1 herb 
2Herber.deHerbyJugendherberge
3HerbstHerbstloservollherb
4hartleichtschwer
5beherbergenHerbstanfangherbes Wetter


Excel Tabellen im Web darstellen >>
Excel Jeanie HTML 4

Bei mir das
beherbergen steht?
oder
Jugendherberge?
Gruß Matthias

funzt es jetzt ?
Dirk

Hallo Matthias,

danke für den Hinweis.
Nur dadurch bin ich auf diesen Makel gestoßen.
Habe das UCase daraufhin schon weiter oben im Code benutzt:
i = InStr(UCase(rng), UCase(SuBegr))
Zwar funktioniert es jetzt auch in dem von Dir geschilderten Fall, aber bitte frag' mich nicht, warum das so ist... Ich bin absoluter VBA-Laie.
Grüße
Dirk

ja klar ...
Matthias

Hallo
Nee, ich frag Dich nicht warum ;-)
So gehts ja dann auch:
Bereiche hatte ich zum Testen reduziert
Bitte wieder anpassen!
Karins Vorschlag:
Option Explicit
Sub treffer_rot()
Dim rng As Range
Dim i As Integer
Dim SuBegr As String    'SuchBegriff
Dim SuZeich As Long     'SuchZeichen (Anzahl)
SuBegr = Range("b1").Value
SuZeich = Len(SuBegr)
For Each rng In Range("A2:C5")  'in A2:C5
With rng
i = InStr(UCase(.Text), UCase(SuBegr))
If i > 0 Then
.Characters(i, SuZeich).Font.Color = vbRed
.Characters(i, SuZeich).Font.Bold = True
End If
End With
Next
End Sub
oder eben Rudis Vorschlag
Option Explicit
Sub treffer_rot()
Dim rng As Range
Dim i As Integer
Dim SuBegr As String    'SuchBegriff
Dim SuZeich As Long     'SuchZeichen (Anzahl)
SuBegr = Range("b1").Value
SuZeich = Len(SuBegr)
For Each rng In Range("A2:C5")  'in A2:C5
With rng
i = InStr(1, rng, SuBegr, vbTextCompare)
If i > 0 Then
.Characters(i, SuZeich).Font.Color = vbRed
.Characters(i, SuZeich).Font.Bold = True
End If
End With
Next
End Sub
Beides mal in ein With-Konstrukt eingebettet
Gruß Matthias

AW: vbTextCompare
Rudi

Hallo,
man muss den ersten Parameter auch angeben. Hab ich übersehen.
i = InStr(1,rng, SuBegr, vbTextCompare)
Gruß
Rudi

AW: vbTextCompare
Dirk

Hallo Rudi,
habe Deine Variante gerade auch nach Matthias' Hinweis getestet.
Und wie von Dir nicht anders zu erwarten, funktioniert es genau wie gewünscht !
Vielen Dank.
MfG
Dirk

mehrere Treffer in einer Zelle
Dirk

Hallo nochmal,
gerade bin ich über einen Sonderfall gestolpert, der allerdings häufiger vorkommt:
Der Suchbegriff (SuBegr) kann mehrmals in einer ZELLE (rng) stehen.
Momentan wird nur der !. Treffer hervorgehoben, also:
Suchbegriff: herb
Zellinhalt: In der Jugendherberge werden nicht nur Jugendliche beherbergt.
falsches Ergebnis: In der Jugendherberge werden nicht nur Jugendliche beherbergt.
gesuchtes Ergebnis: In der Jugendherberge werden nicht nur Jugendliche beherbergt.
Was muss an diesem Code geändert werden?
Option Explicit
Sub treffer_rot()
Dim rng As Range
Dim i As Integer
Dim SuBegr As String    'SuchBegriff
Dim SuZeich As Long     'SuchZeichen (Anzahl)
SuBegr = Range("b1").Value
SuZeich = Len(SuBegr)
For Each rng In Range("A2:C5")  'in A2:C5
With rng                                   'von Matthias L.
i = InStr(UCase(.TEXT), UCase(SuBegr))     'von Beverly
i = InStr(1, rng, SuBegr, vbTextCompare)   'von Rudi Maintaire
If i > 0 Then
.Characters(i, SuZeich).Font.Color = vbRed
.Characters(i, SuZeich).Font.Bold = True
End If
End With
Next
End Sub
Grüße
Dirk
OffTopic: Wie kann man hier im Forum Text rot darstellen?

AW: mehrere Treffer in einer Zelle
Rudi

Hallo,
dann musst du mit einer Schleife durch den Text.
Motto:
for i=1 to len(rng)-SuZeich+1
if lcase(mid(rng,i,SuZeich))=lcase(subegr) then
rng.Characters(i, SuZeich).Font.Color = vbRed
end if
next
Gruß
Rudi

AW: mehrere Treffer in einer Zelle
Dirk

Hallo Rudi,
danke Dir vielmals - PROBLEM GELÖST !!!
Hast Du noch einen Tipp oder Link zu meiner OffTopic-Frage?
MfG
Dirk

erledigt
Dirk

sorry, hab's gerade gefunden:
" < font color="#ff0000">rote Schrift< /font> "
oder
" < font color="red">rote Schrift< /font> "
(ohne Leerzeichen nach den KleinerAls-Zeichen
rote Schrift

Bewerten Sie hier bitte das Excel-Portal