Microsoft Excel

Herbers Excel/VBA-Archiv

Wortteil färben (Treffer rot)

Betrifft: Wortteil färben (Treffer rot) von: Dirk C.
Geschrieben am: 02.12.2015 14:35:28

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

  

Betrifft: AW: Wortteil färben (Treffer rot) von: Beverly
Geschrieben am: 02.12.2015 15:02:23

Hi Dirk,

wandle alles in Großbuchstaben (oder Kleinbuchstaben) um:

    If InStr(UCase(rng), UCase(SuBegr)) > 0 Then

GrußformelBeverly's Excel - Inn


  

Betrifft: gelöst (UCase) von: Dirk C.
Geschrieben am: 02.12.2015 15:33:39

Hallo Karin,

tausend Dank für Deinen Tipp, funktioniert prima !!!
Genau danach suchte ich, Du hast mir den Tag gerettet...

Grüße
Dirk


  

Betrifft: vbTextCompare von: Rudi Maintaire
Geschrieben am: 02.12.2015 15:33:17

Hallo,
i = InStr(rng, SuBegr, vbTextCompare)

Gruß
Rudi


  

Betrifft: AW: vbTextCompare von: Dirk C.
Geschrieben am: 02.12.2015 15:58:23

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


  

Betrifft: geht bei mir auch nicht von: Matthias L
Geschrieben am: 02.12.2015 16:08:50

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


  

Betrifft: funzt es jetzt ? von: Dirk C.
Geschrieben am: 02.12.2015 16:21:47

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


  

Betrifft: ja klar ... von: Matthias L
Geschrieben am: 02.12.2015 16:33:21

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


  

Betrifft: AW: vbTextCompare von: Rudi Maintaire
Geschrieben am: 02.12.2015 16:14:25

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

Gruß
Rudi


  

Betrifft: AW: vbTextCompare von: Dirk C.
Geschrieben am: 02.12.2015 16:31:55

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


  

Betrifft: mehrere Treffer in einer Zelle von: Dirk C.
Geschrieben am: 03.12.2015 12:48:13

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?


  

Betrifft: AW: mehrere Treffer in einer Zelle von: Rudi Maintaire
Geschrieben am: 03.12.2015 16:30:36

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


  

Betrifft: AW: mehrere Treffer in einer Zelle von: Dirk C.
Geschrieben am: 03.12.2015 18:15:40

Hallo Rudi,

danke Dir vielmals - PROBLEM GELÖST !!!

Hast Du noch einen Tipp oder Link zu meiner OffTopic-Frage?

MfG
Dirk


  

Betrifft: erledigt von: Dirk C.
Geschrieben am: 03.12.2015 18:47:16

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


 

Beiträge aus den Excel-Beispielen zum Thema "Wortteil färben (Treffer rot)"