Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Case Prüfen ob Teilstring in String enthalten

VBA Case Prüfen ob Teilstring in String enthalten
25.07.2014 17:18:58
Johann
Hallo zusammen,
wie würdet ihr den folgende Code ergänzen, wenn die Formatierung erhalten bleiben soll, wenn "COAL" oder "Steinkohle" noch ein zusätzliches Zeichen erhalten kann, wie z.B. COAL_2
oder COAL_A oder ...?
...
Case "COAL", "Steinkohle"
.Interior.ColorIndex = 1
...
Euch allen ein schönes WE!
Viele Grüße
Johann

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Case Prüfen ob Teilstring in String enthalten
25.07.2014 17:40:24
Michael
Hallo Johann,
in Deinem Beispiel sind es mit dem Unterstrich ZWEI Zeichen. Aber wenn der denn schon da ist, kann man auch danach suchen.
Wenn Du den ursprünglichen Inhalt der Variable noch brauchst, würde ich ihn zum Vergleich in CASE in eine weitere Variable kopieren, hier eben vgl_string: den kannst Du dann vor dem Unterstrich abschneiden und CASEn:
Sub Makro1()
test_string = "Steinkohle_A"
posi = InStr(1, test_string, "_")
If posi > 0 Then vgl_string = _
Mid(test_string, 1, posi - 1) _
Else vgl_string = test_string
MsgBox test_string & " " & vgl_string
End Sub
Schönes Wochenende,
Michael

Anzeige
AW: VBA Case Prüfen ob Teilstring in String enthalten
25.07.2014 18:00:53
Johann
Hallo Michael,
ielen Dank für die schnelle Antwort!
Leider ist der nicht immer da. Es kann eine Zeichenfolge, beginnend mit einem Leerzeichen oder einem Unterstrich und weiteren Zeichen folgen. Wieviele Zeichen danach noch angehängt werden können, kann ich jetzt noch nicht abschätzen, aber wohl nicht mehr als 10.
Gibt es in VBA nicht sowas in der Art wie COAL*?
Viele Grüße
Johann

Anzeige
AW: VBA Case Prüfen ob Teilstring in String enthalten
25.07.2014 17:52:04
UweD
Hallo
meinst du das so?
Sub Makro1()
Dim Test$
Test = "COAL_1"
Select Case InStr(Test, "COAL") Or InStr(Test, "Steinkohle")
Case Is > 0
MsgBox "Treffer"
'.Interior.ColorIndex = 1
Case Else
MsgBox "mache nichts"
End Select
End Sub

Anzeige
AW: VBA Case Prüfen ob Teilstring in String enthalten
25.07.2014 18:05:29
Johann
Hi Uwe,
vielen Dank für die schnelle Antwort!!
Ich befürchte ich habe mich bei meiner Frage unpräzise ausgedrückt.
Es können mehr als ein Zeichen angehängt werden.
Welche genau und wieviele ist ex ante unbekannt, jedoch sollten es nicht mehr als 10 sein.
Viele Grüße
Johann

Anzeige
Viell solltest du besser mal sagen, worum es ...
25.07.2014 18:10:43
Luc:-?
…insgesamt geht, Johann,
denn das Archiv enthält 100e Lösungen vglbarer Fälle. Da ist mit Sicherheit auch eine für dein eigentliches Problem dabei.
Ansonsten geht so etwas prinzipiell mit Vglsoperator Like, also bspw: If … Like "*COAL*" Then
Gruß, Luc :-?

AW: Viell solltest du besser mal sagen, worum es ...
25.07.2014 18:16:33
Johann
Hallo Luc,
es geht darum die Datenreihen in meinen Pivot Charts immer gleich einzufärben.
Viele meiner Diagramme habe immer dieselben Legendeneinträge, z.B. Primärenergieträger.
Mit Case funktioniert mein Code recht gut.
Es kann abe rvorkommen, dass ich zusätrzliche Informationen brauche, z.B. ob zum Energieträger Erdgas Gasturbinen (das wäre die zusätzliche Zeichenfolge _GT) oder Kombikraftwerke ( das wäre _GuD) installiert sind. Die ziehe ich mir dann noch zusätzlich in meine Reihen.

Anzeige
AW: Viell solltest du besser mal sagen, worum es ...
25.07.2014 18:59:22
Michael
Hallo zusammen,
Lucs Vorschlag klingt doch gar nicht so schlecht?
Im Grunde isses schon egal, ob man eine Reihe IFs oder CASEs untereinanderschreibt.
In Deinen weiteren Beispielen sind aber trotzdem nur Unterstriche vorhanden. Du könntest ja eine weitere Suche nach Leerzeichen vornehmen und das dann für den vgl_string abschneiden.
Sub Makro1()
test_string = "Steinkohle_A"
posi = InStr(1, test_string, "_")
If posi > 0 Then vgl_string = _
Mid(test_string, 1, posi - 1) _
Else vgl_string = test_string
posi = InStr(1, test_string, " ")
If posi > 0 Then vgl_string = _
Mid(test_string, 1, posi - 1) _
Else vgl_string = test_string
MsgBox test_string & " " & vgl_string
End Sub
Mit der Methode schneidest Du auf alle Fälle alles ab, egal, wieviele Zeichen noch kommen.
Ein grundsätzlich anderer Weg wäre, die Anhängsel in eine extra Spalte zu setzen, dann ersparst Du Dir die Programmierung.
Schöne Grüße,
Michael

Anzeige
select case true
25.07.2014 22:31:17
Rudi
Hallo,
VAR=Range("A1")
select case true
case lcase(VAR) is like "coal*", lcase(VAR) is like "steinkohle*"
'mach was
end select
Gruß
Rudi

hehe -;) owt
26.07.2014 14:46:54
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Teilstring in einem String mit VBA prüfen


Schritt-für-Schritt-Anleitung

Um in Excel VBA zu prüfen, ob ein Teilstring in einem String enthalten ist, kannst Du die Select Case-Anweisung in Kombination mit der Funktion InStr verwenden. Hier ist ein einfaches Beispiel, das zeigt, wie Du dies umsetzen kannst:

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Erstelle ein neues Modul (Rechtsklick auf "VBAProject", dann "Einfügen" > "Modul").
  3. Füge den folgenden Code ein:
Sub PrüfenObTeilstring()
    Dim test_string As String
    test_string = "COAL_A"

    Select Case True
        Case InStr(test_string, "COAL") > 0
            MsgBox "Der Teilstring 'COAL' ist enthalten."
        Case InStr(test_string, "Steinkohle") > 0
            MsgBox "Der Teilstring 'Steinkohle' ist enthalten."
        Case Else
            MsgBox "Kein Teilstring gefunden."
    End Select
End Sub
  1. Schließe den Editor und führe das Makro aus (Alt + F8).

Häufige Fehler und Lösungen

  1. Fehlerhafte Syntax

    • Stelle sicher, dass alle Anführungszeichen und Klammern korrekt gesetzt sind. Ein häufiges Problem ist, dass vergessen wird, die End Select-Anweisung zu setzen.
  2. InStr-Funktion gibt immer 0 zurück

    • Überprüfe, ob der zu suchende Teilstring tatsächlich im Hauptstring vorhanden ist. Achte auf Groß- und Kleinschreibung, falls Du eine case-sensitive Suche durchführen möchtest.
  3. Variable nicht deklariert

    • Wenn Du Option Explicit in Deinem Modul aktiviert hast, stelle sicher, dass alle Variablen deklariert sind.

Alternative Methoden

  • Mit Like-Operator Du kannst auch den Like-Operator in VBA verwenden, um Teilstrings zu prüfen. Hier ein Beispiel:
Sub PrüfenMitLike()
    Dim test_string As String
    test_string = "Steinkohle_B"

    If test_string Like "COAL*" Or test_string Like "Steinkohle*" Then
        MsgBox "Treffer!"
    Else
        MsgBox "Kein Treffer."
    End If
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du die oben genannten Methoden in verschiedenen Szenarien anwenden kannst:

  • Prüfen, ob ein Teilstring in einer Zelle vorhanden ist:
Sub ZellePrüfen()
    Dim cell_value As String
    cell_value = Range("A1").Value

    If InStr(cell_value, "Energie") > 0 Then
        MsgBox "Das Wort 'Energie' ist in der Zelle vorhanden."
    End If
End Sub
  • Verwendung von Mid und InStr für die Teilstring-Analyse:
Sub TeilstringAnalysieren()
    Dim test_string As String
    test_string = "Erdgas_GT"

    posi = InStr(test_string, "_")
    If posi > 0 Then
        MsgBox "Der Teilstring bis zum Unterstrich: " & Mid(test_string, 1, posi - 1)
    End If
End Sub

Tipps für Profis

  • Nutze Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind und um Fehler frühzeitig zu erkennen.
  • Spiele mit der Like-Syntax, um flexiblere Suchmuster zu erstellen.
  • Kombiniere Select Case mit InStr, um mehrere Bedingungen in einer strukturierten Weise zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich prüfen, ob ein String mehrere Teilstrings enthält? Du kannst mehrere Case-Anweisungen in einer Select Case-Struktur verwenden oder mehrere If-Anweisungen einsetzen.

2. Was ist der Unterschied zwischen InStr und Like? InStr gibt die Position des Teilstrings zurück, während Like überprüft, ob ein Muster im String vorhanden ist.

3. Wie kann ich die Suche nicht case-sensitive gestalten? Verwende die Funktion LCase oder UCase, um sowohl den Suchstring als auch den Hauptstring in die gleiche Schreibweise zu konvertieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige