Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Case Select SPEZIALE

Case Select SPEZIALE
22.12.2007 21:54:16
nies
Hello friends,
ich weiss ja, so kurz vor'm Fest habt ihr besseres zu tun, als nach VBA-Blondinen und ihren Problemchen Ausschau zu halten, ich wage es trotzdem:
Habe ein Sheet mit etlichen Spalten und einigen Tausend Datensätzen. Bestimmte Spalten möchte ich „bedingt formatieren“: da mehr als 3 Bedingungen via VBA bzw. „Case select“...
Mein Problem: ich möchte bei Erfüllen der Bedingung(en) NICHT den ganzen Zellinhalt (Strings, btw!) mit dem gewählten Format bestücken, sondern eben nur den gesuchten bzw. gefundenen TEILSTRING. Also zB. steht in Zelle A1: „ strenger Abholer“, in A45768: „angestrengtes Nachdenken“ und in A65134: „wurde strenguliert aufgefunden“. (Tippfehler, soll trotzdem gefunden werden!) Die Länge der Zell-Inhalte ist also ganz unterschiedlich, ich möchte aber nur (via CASE SELECT ?), daß das Suchwort „streng/STRENG“ in Farbe Rot/fett formatiert wird, NICHT der komplette Zellinhalt. In der gleichen Spalte A sollen auch alle Teilstrings lautend auf „kein“ ebenfalls in Farbe Rot/fett formatiert werden und außerdem alle Teilstrings lautend auf „nie“. Aber wie gesagt: nicht die ganze Zelle, sondern eben nur der jeweilige „Fund“. Pro Spalte habe ich ca. 20 Such-Teilstrings (Bedingungen?), die immer in gleicher Weise hervorgehoben werden sollen, also nicht etwa „streng“ in ROT/FETT und „nie“ in BLAU/FETT, eben alle Fundstellen (nur in der betreffenden Spalte!) in ROT/FETT. In der Spalte B will ich genauso vorgehen, da habe ich allerdings andere Suchbegriffe; auch hier sollen die Teil-Strings ROT/FETT formatiert werden, sobald eine Zelle dieser Spalte den gesuchten Teil-String enthält... Könnt ihr mir helfen? Würd’ mich freuen, weil die Case Select-Anweisung zwar derzeit gut funktioniert, aber bei 20 Bedingungen irgendwie nicht wirklich hilfreich ist, wenn eben die GANZE ZELLE immer formatiert wird...
Da seh’ ich vor lauter Rot-Schrift nimmer, was eigentlich der Such-String war... Allen, die mir helfen wollen: lieben Dank vorab...
Und an wirklich alle: www wünsche wunderbares weihnachtsfest! grüsse, n

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Case Select SPEZIALE
22.12.2007 22:32:00
HAW
Hallo,
hier noch ein schneller Versuch:

Sub format()
Dim lz&, gef As Range, a%, e%, Adr1$, i%
lz = Cells(Rows.Count, 10).End(xlUp).Row
For i = 1 To lz
Set gef = Columns("A:A").Find(Cells(i, 10).Value, LookAt:=xlPart, MatchCase:=False)
If Not gef Is Nothing Then
a = InStr(gef.Value, Cells(i, 10).Value)
e = Len(Cells(i, 10).Value)
With gef.Characters(Start:=a, Length:=e).Font
.Name = "Arial"
.FontStyle = "Fett"
.ColorIndex = 3
End With
Adr1 = gef.Address
End If
Do
Set gef = Columns("A:A").FindNext(After:=gef)
If Not gef Is Nothing Then
a = InStr(gef.Value, Cells(i, 10).Value)
e = Len(Cells(i, 10).Value)
With gef.Characters(Start:=a, Length:=e).Font
.Name = "Arial"
.FontStyle = "Fett"
.ColorIndex = 3
End With
End If
Loop While Not gef.Address = Adr1
Next i
End Sub


Die Suchbegriffe stehen in der Spalte J ab J1
Ich geh jetzt zu Bett, gute Nacht
Gruß
Heinz

Anzeige
AW: Case Select SPEZIALE
22.12.2007 22:38:14
Josef
Hallo Nies (gesundheit)
als Ansatz.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub TeilstringMarkieren()
Dim a As Variant, b As Variant
Dim intFirstC As Integer, intLastC As Integer
Dim l As Integer, m As Integer, n As Integer, x As Integer
Dim lngFirstR As Long, lngLastR As Long, lngI As Long

lngFirstR = 1 'erste Zeile die Überprüft werden soll

intFirstC = 1 'erste Spalte die Überprüft werden soll
intLastC = 2 'letzte Spalte die Überprüft werden soll

Redim b(intLastC - intFirstC)

b(0) = Array("streng", "nach") 'Wörter die in der ersten Spalte markiert werden sollen
b(1) = Array("nie", "erfolg", "vers") 'Wörter die in der zweiten Spalte markiert werden sollen
'...

For l = intFirstC To intLastC
    
    lngLastR = Application.Max(lngFirstR, Cells(Rows.Count, l).End(xlUp).Row)
    
    With Range(Cells(lngFirstR, l), Cells(lngLastR, l))
        .Font.Bold = False
        .Font.ColorIndex = xlAutomatic
    End With
    
    a = Range(Cells(lngFirstR, l), Cells(lngLastR, l))
    
    For lngI = 1 To UBound(a, 1)
        n = 1
        For m = 0 To UBound(b(l - intFirstC))
            n = 1
            Do
                x = InStr(n, LCase(a(lngI, 1)), LCase(b(l - intFirstC)(m)))
                If x > 0 Then
                    Cells(lngI + lngFirstR - 1, l).Characters(x, Len(b(l - intFirstC)(m))).Font.ColorIndex = 3
                    Cells(lngI + lngFirstR - 1, l).Characters(x, Len(b(l - intFirstC)(m))).Font.Bold = True
                    n = x + 1
                Else
                    Exit Do
                End If
            Loop While n < Len(a(lngI, 1))
        Next
    Next
Next

End Sub

Gruß Sepp

Anzeige
AW: Case Select SPEZIALE
23.12.2007 06:42:00
nies
Ihr lieben, vielen Dank für eure Mühen! (Hatte mir den Code ehrlich gesagt einfacher vorgestellt...)
Sepp, deinen Code habe ich getestet, an der Stelle
For m = 0 To UBound(b(l - intFirstC))
kommt Laufzeitfehler 13 "Typen unverträglich". Woran mag das liegen? Zumal die Worte der Arrays tatsächlich wunschgemäß formatiert werden (bei 60Tsd Zeilen habe ich aber nicht alle geprüft...)
Magst du dir's nochmal ansehen, bevor's Christkind kommt? Dankeschön! n

AW: Case Select SPEZIALE
23.12.2007 11:00:00
Josef
Hallo Nies,
da hast du wohl nicht für jede Spalte ein Array mit den Suchwörtern angelegt.
Ich habe das jetzt umgestellt. Die Suchwörter stehen jetzt in der Tabelle "Keywords", das ist leichter zu pflegen als direkt im Code.
Hier eine Beispielmappe.
https://www.herber.de/bbs/user/48608.xls
Gruß Sepp

Anzeige
AW: Case Select SPEZIALE
23.12.2007 19:17:00
nies
Lieber Sepp,
du hattest natürlich recht! Ich hatte 6 Suchspalten via intFirstC / intLastC angegeben, aber nur 2 Arrays definiert... Nach Korrektur klappt's ohne Fehlermeldung/ohne Stopp einwandfrei, herzlichen Dank, ich bleibe bei dieser Version, auch wenn dein zweiter Vorschlag ebenso genial ist (über das Gedicht musste ich schmunzeln...). Du scheinst ja ein wahrer Zauberer zu sein, kann ich dich noch mit folgendem "Task" locken? In den Arrays tauchen zB. die Suchworte "intern" oder "Fil" auf; wie kann man realisieren, daß nun zwar diese Teilstrings gefunden und formatiert werden, aber NICHT, wenn "intern" in "international" oder in "Hinternah" vorkommt resp. wenn "Fil" in "Fillipo" oder "filigran" vorkommt? Zur Ergänzung: die Arrays sind nicht identisch, haben teils die gleichen, teils unterschiedliche Suchworte... Viel Spaß beim Tüfteln!
Dir, lieber Heinz, ebenfalls herzlichen Dank; dein Code lief leider nicht wie gewünscht, seltsame Phänomene traten auf, so wurden zB. auch Teilstrings "gerötet", die gar nicht im Suchtext enthalten waren... Aber zum Üben des Verständnis' von VBA ist der Code klasse: habe den Ehrgeiz herauszufinden, warum es nicht klappt...
Fröhliche Weihnacht an alle,
n

Anzeige
AW: Case Select SPEZIALE
23.12.2007 19:35:06
Josef
Hallo nies,
freud mich das es läuft.
Zur Erweiterung: Woher soll der Code "wissen" wann ein Teilstring markiert werden soll und wann nicht?
Ausserdem, so glaube ich, lässt sich das mit vertretbarem Aufwand nich realisieren.
Gruß Sepp

AW: Case Select SPEZIALE
23.12.2007 19:45:00
nies
Hallo, Sepp, schon wieder aktiv? Klasse! Ja, wie der Code das machen soll, also da habe ich an folgendes gedacht: suche in Spalte X den (Teil-)String "intern"; wenn gefunden, prüfe, ob rechts davon "ational" steht, oder links davon "H"; wenn ja, gehe weiter, wenn nein, mache den Teilstring ROT und FETT... Ob das mit Arrays geht, weiss ich net, bin ja nun echte Anfängerin... Aber es ist auch nicht wirklich wichtig, da kann ich sicher noch mit der Filterfunktion arbeiten... Und du hast mir echt SUUUUUPER geholfen, also geniesse lieber ein paar Plätzchen statt zu tüfteln... Danke schön nochmals, n
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige