Text-String bereinigen

Bild

Betrifft: Text-String bereinigen
von: Peter
Geschrieben am: 03.12.2015 09:34:57

Hallo zusammen
Es sollen Text-Strings ab Zeile 4, Spalte G bis zur letzten benutzten Zeile bereinigt werden (VBA). Leerzeichen zwischen den Buchstaben M, m oder U und einer Zahl sollen gelöscht werden. Zum Beispiel:
"Text Text 3 000 000 IU Text" korrigiert "Text Text 3 000 000IU text"
"Text Text 20 ma Text" korrigiert "Text Text 20ma Text"
"Text Text 30 MA text" korrigiert "Text Text 30MA text"
"Text Text 0.5 MA text" korrigiert "Text Text 0.5MA text"
Danke schon jetzt für jede Unterstützung.
Viele Grüsse
Peter

Bild

Betrifft: AW: Text-String bereinigen
von: ransi
Geschrieben am: 03.12.2015 10:09:33
Hallo,
Leerzeichen zwischen den Buchstaben M, m oder U und einer Zahl sollen gelöscht werden.
Das passt aber nicht zu deinem ersten Beispiel:
"Text Text 3 000 000 IU Text" korrigiert "Text Text 3 000 000IU text"
Schau mal ob dich dies weiter bringt:
Tabelle1

 AB
1"Text Text 3 000 000 IU Text"Text Text 3 000 000IU Text
2"Text Text 20 ma Text"Text Text 20ma Text
3"Text Text 30 MA text"Text Text 30MA text
4"Text Text 0.5 MA text"Text Text 0.5MA text
5abcabc

Formeln der Tabelle
ZelleFormel
B1=machs(A1)
B2=machs(A2)
B3=machs(A3)
B4=machs(A4)
B5=machs(A5)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Das ist der Code:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function machs(zelle) As String
    Dim Regex As Object
    Dim objMatch As Object
    Set Regex = CreateObject("VbScript.Regexp")
    With Regex
        .Pattern = "[0-9] (?=[a-zäöüß])"
        .ignorecase = True
        .Global = True
        If .test(zelle) = True Then
            For Each objMatch In .Execute(zelle)
                machs = .Replace(zelle, Left(objMatch, 1))
            Next
            Else:
            machs = zelle
        End If
    End With
End Function


ransi

Bild

Betrifft: AW: Text-String bereinigen
von: Peter
Geschrieben am: 03.12.2015 10:27:30
Hallo Ransi
Danke für Deine wertvolle Info. Jedoch verstehe ich den Code noch nicht ganz.
1. Wie kann ich den Code auslösen, in einem Standard Modul eingefügt tut sich nichts?
2. Ich möchte die Strings nur in Tabelle "MA", ab Zeile 4 in Spalte G, bis zur letzten benutzten Zeile bereinigt haben, wie ist das in diesem Code adressiert?
Danke für mehr Infos
Viele Grüsse,
Peter

Bild

Betrifft: Mit Schleifchen drumrum
von: ransi
Geschrieben am: 03.12.2015 10:46:53
Hallo Peter,
Das ist nur die Funktion.
Ich dachte die Schleife drumrum kannst du selber binden ;-)
Teste mal:

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Aufruf()
    Dim objZelle As Range
    Dim Bereich As Range
    With Sheets("MA")
        Set Bereich = .Range(.Cells(4, 7), .Cells(.Rows.Count, 7).End(xlUp)) '...ab Zeile 4 in Spalte G, bis zur letzten benutzten Zeile...
    End With
    For Each objZelle In Bereich
        objZelle.Value = machs(objZelle.Value)
    Next
End Sub


Function machs(Zelle) As String
    Dim Regex As Object
    Dim objMatch As Object
    Set Regex = CreateObject("VbScript.Regexp")
    With Regex
        .Pattern = "[0-9] (?=[a-zäöüß])" 'Findet ein einzelnes Leerzeichen zwischen Zahl und Buchstabe
        .ignorecase = True
        .Global = True
        If .test(Zelle) = True Then
            For Each objMatch In .Execute(Zelle)
                machs = .Replace(Zelle, Left(objMatch, 1))
            Next
            Else:
            machs = Zelle
        End If
    End With
End Function


ransi

Bild

Betrifft: AW: Mit Schleifchen drumrum
von: Peter
Geschrieben am: 03.12.2015 11:18:13
Hallo Ransi
Super vielen Dank für Deine Hilfe, es funktioniert.
Habe noch folgende Frage:
Wie könnte ich die Korrektur, nur auf die aktive Zelle in Spalte G ab Zeile 4 begrenzen?
Also nicht die ganze Spalte durchlaufen lassen, sondern nur jeweils wenn in einer Zelle der Spalte G ein Eintrag gemacht wird, wird dieser Eintrag unmittelbar in der aktiven Zelle korrigiert?
Danke Dir jetzt schon für Deine wertvolle Hilfe.
Viele Grüsse,
Peter

Bild

Betrifft: Private Sub Worksheet_Change(ByVal Target As Range
von: ransi
Geschrieben am: 04.12.2015 10:15:27
Hallo Peter,
Schau mal hier:

' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Bereich As Range
    Dim objZelle As Range
    Dim bolEvents As Boolean
    Set Bereich = Intersect(Target, Range("G4:G" & Rows.Count))
    If Bereich Is Nothing Then Exit Sub 'Auf Bereich G4:G ganz unten
    On Error GoTo Errorhandler
    bolEvents = Application.EnableEvents
    Application.EnableEvents = False 'Ereignissmakros ausschalten
    For Each objZelle In Bereich
        objZelle = machs(objZelle)
    Next
    Errorhandler:
    Application.EnableEvents = bolEvents 'Ereignissmakros auf alte Einstellunb setzen
End Sub



Function machs(Zelle)
    Dim Regex As Object
    Dim objMatch As Object
    Set Regex = CreateObject("VbScript.Regexp")
    With Regex
        .Pattern = "[0-9] (?=[a-zäöüß])" 'Findet ein einzelnes Leerzeichen zwischen Zahl und Buchstabe
        .ignorecase = True
        .Global = True
        If .test(Zelle) = True Then
            For Each objMatch In .Execute(Zelle)
                machs = .Replace(Zelle, Left(objMatch, 1))
            Next
            Else:
            machs = Zelle
        End If
    End With
End Function


Der Code gehört nicht in ein Standardmodul sondern in das Klassenmodul der Tabelle MA.
Userbild
ransi

Bild

Betrifft: AW: Private Sub Worksheet_Change(ByVal Target As Range
von: Peter
Geschrieben am: 04.12.2015 10:55:49
Hallo Ransi
Echt super, vielen Dank für Deine wertvolle Hilfe, funktioniert super macht richtig Spass!
Viele Grüsse,
Peter

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Abfrage für gleiche Anweisungen (DIR) verkürzen"