Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1460to1464
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
Inhaltsverzeichnis

Text-String bereinigen

Text-String bereinigen
03.12.2015 09:34:57
Peter
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

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text-String bereinigen
03.12.2015 10:09:33
ransi
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

Anzeige
AW: Text-String bereinigen
03.12.2015 10:27:30
Peter
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

Mit Schleifchen drumrum
03.12.2015 10:46:53
ransi
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

Anzeige
AW: Mit Schleifchen drumrum
03.12.2015 11:18:13
Peter
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

Private Sub Worksheet_Change(ByVal Target As Range
04.12.2015 10:15:27
ransi
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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige