Registriert seit: 25.09.2014
Version(en): 2010-2013
Hallo Freunde,
ich habe in einem String Klammern stehen, die ich samt deren Inhalt entfernen möchte. Mein kleines Makro funktioniert zwar, aber ich frage mich,
ob man dies nicht auch mit Wildcards machen kann und sich so Programmiercode ersparen könnte.
Code: Sub Klammern_Mit_Inhalt_entfernen()
Dim vstrS
vstrS = "Die Klammern [Info 1] samt [Info 2] deren Inhalt [Info 3] entfernen."
vstrS = Split(vstrS)
For i = 1 To UBound(vstrS)
If InStr(vstrS(i), "[") Then vstrS(i) = ""
Next i
vstrS = Join(vstrS)
debug.print vstrS
End Sub
Registriert seit: 13.04.2014
Version(en): 365, 2019
30.05.2016, 13:49
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2016, 13:49 von BoskoBiati.)
Hallo,
ich würde es so angehen:
Code: Sub Klammern_Mit_Inhalt_entfernen()
Dim vstrS
Dim xStr
Dim i
vstrS = "Die Klammern [Info 1] samt [Info 2] deren Inhalt [Info 3] entfernen."
vstrS = Replace(vstrS, "[", "|")
vstrS = Replace(vstrS, "]", "|")
vstrS = Split(vstrS, "|")
For i = 0 To UBound(vstrS) Step 2
xStr = xStr & vstrS(i)
Next i
End Sub
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 11.04.2014
Version(en): Office 2007
Auch Hallo,
ich habe mich wieder an RegEx versucht (mieses pattern ) .
Code: Sub Klammern_Mit_Inhalt_entfernen()
Dim vstrS
Dim re As Object
Set re = CreateObject("vbscript.regexp")
vstrS = "Die Klammern [Info 1] samt [Info 2] deren Inhalt [Info 3] entfernen."
re.Global = True
re.Pattern = "(\[\w*\s+\w+\]\s)"
vstrS = re.Replace(vstrS, "")
Debug.Print vstrS
End Sub
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 11.10.2014
Version(en): 12/2007&14/2010
Gibt's doch alles schon und deutlich universeller, Wulfi & Co:
A1: Die Klammern [Info 1] samt [Info 2] deren Inhalt [Info 3] entfernen.
Ergebnis: Die Klammern samt deren Inhalt entfernen.
aus Formel: =MaskOn(A1;"mrk[]";1)
Die UDF MaskOn von 2005 findest du im Herber-Archiv von 2014 in funktionsfähiger Form (Button RECHERCHE im Forum, dann oberste Eingabezeile im Suchmenü benutzen!).
Gruß, Castor
Registriert seit: 10.04.2014
Version(en): 2016 + 365
31.05.2016, 04:09
(Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2016, 04:38 von Rabe.)
Hi Luc,
(31.05.2016, 01:41)Castor schrieb: Die UDF MaskOn von 2005 findest du im Herber-Archiv von 2014 in funktionsfähiger Form (Button RECHERCHE im Forum, dann oberste Eingabezeile im Suchmenü benutzen!).
ist das dann die:
Code: Function MaskOn(ByVal Text As String, ByVal ZTyp As String, Optional ByVal ZTmask) As String
Dim i As Integer, a As String, d As String, z As String, ZusZ As String
Const b = "abcdefghijklmnopqrstuvwxyzäöü", c = "0123456789", e = " +-,.E " 'letztZ=Chr(160)
If IsMissing(ZTmask) Then
ZTmask = 1
ElseIf IsNumeric(ZTmask) Then
ZTmask = ZTmask Mod 2 + 1
Else
ZusZ = ZTmask: ZTmask = 1
End If
For i = 1 To Len(Text)
Select Case lcase(Left(ZTyp, 3)) 'feste ZKomb in ZTyp
Case "gkz", "buz", "bz", "bzi", "len", "lin", "a0", "an", "anu"
a = c & b & "ß": z = lcase(Mid(Text, i, 1))
Case "gk", "gkb", "bst", "buc", "let", "lit"
a = b & "ß": z = lcase(Mid(Text, i, 1))
Case "kb", "mil", "min"
a = b & "ß": z = Mid(Text, i, 1)
Case "gb", "cal", "cap"
a = UCase(b): z = Mid(Text, i, 1)
Case "zf", "dg", "zif", "dig", "num", "00", "000"
a = c: z = Mid(Text, i, 1)
Case "zw", "nv", "zah", "zwt", "nvl", "+0", "0.-"
a = c & e: z = Mid(Text, i, 1)
Case "mar", "mrk", "mkt", "mtx"
z = Mid(Text, i, 1)
If z = Left(Right(ZTyp, 2), 1) Then
a = z: d = z
ElseIf z = Right(ZTyp, 1) Then
a = z: d = z
ElseIf d = Left(Right(ZTyp, 2), 1) Then
a = z
Else: a = ""
End If
Case Else 'freie ZKomb in ZTyp
a = ZTyp: z = Mid(Text, i, 1)
End Select
a = a & ZusZ
On Abs(CInt(InStr(a, z) > 0)) + ZTmask GoSub lm, zm, lm
Next i
MaskOn = WorksheetFunction.Substitute(Trim(MaskOn), " ", " ")
Exit Function
lm: Rem reduziert maskierte Zeichen (mehrere hintereinander als 1 blank)
MaskOn = MaskOn & IIf(Right(MaskOn, 1) = " ", "", " ")
Return
zm: Rem übernommene Zeichen
MaskOn = MaskOn & Mid(Text, i, 1)
Return
End Function
aus diesem Link:
http://www.herber.de/forum/archiv/1344to...344962.htm
mit dieser Anleitung vom 14.01.2014?
1. alle GBuchstaben, 2. maximal 3 GB'n, 3. stets 3 Buchstaben (ggf um letzten B'st des Nachnamens ergänzt)
Nebenbei, da irrelevant, ist die hier benutzte Version (2.9) ist die hier (Hilfe zu AddIn FXss) beschriebene:
MaskOn ( Text; ZTyp; ZTmask=0; ErsZ=blank )
Ergebnis: Listentext, Zeichenfolge oder Zahl
Erzeugt reduzierte Zeichenfolge als Listentext über Maske laut Arg2 mit Einzelblanks als Ersatz-/Trennzeichen
Arg2.1: anu=alf+numerisch alf=Buchstabe kb=Kleinbuchstabe gb=Großbuchstabe num=Ziffer zw=Zahlenwerte
Arg2.2: hex=Hexadezimalzahlen ad=Zelladresse mar‘’=Markierung ‘…’ [‘’=beliebige differente Zeichen ]
Arg2.3: beliebige direkt eingetragene Zeichen/kombination (freie Zeichenkombination hier ggw nicht möglich)
Arg3: 0 [1 ] *nur [ohne ] Zeichen laut Arg2 oder zusätzlich zu belassende Zeichen (implizit 0)
Arg4: fehlt/leer/beliebiges nicht in Arg1 enthaltenes Zeichen
Bsp1: a) M =MaskOn("5 Mann";"gb"), b) , % =MaskOn("1,6%";"num";1), c) 2,52 =MaskOn("zu 2,52 Euro";"zw")
Bsp2: a) F0 =MaskOn("F0 byte";"hex"), b) A$1:IV1 =MaskOn("Sum(A$1:IV1)";"ad"), c) Sum =MaskOn("Sum(A:A)";"mar()";1)
Bsp3: a) a b c =MaskOn("(a+b)*c";"( + * )";1), b) a W n =MaskOn("alle Wellen";"el";1), c) lle el =MaskOn("alle Welt";"el")
Hinweis: Im Falle von Arg2="ad" ist in Arg3 nur ein Einzelzeichen, keine Folge einzelner zusätzlich zu bewahrender Zeichen wie in allen anderen Fällen zulässig. Außerdem muss es unmittelbar vor einer erkennbaren Zelladresse in Arg1 auftreten. Falls hier der sogenannte Schnittmengenoperator (Leerzeichen) auftreten kann, sollte(n) ggf (ein) andere(s) Zeichen für Arg4 gewählt werden.
Achtung! Von dieser Version werden keine Z1S1- und Adressen oberhalb von IV65536 (xlVersionen ab 12) erkannt!
Vs 2.9b -Autor: LSr -1Pub:(2.1) 20050217 herber.de -CDate: 2004/5 -LUpd: 20100206n
Ist aber gar nicht so einfach zu finden, wie Du schreibst!
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
31.05.2016, 06:11
(Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2016, 06:14 von Kuwer.)
Hallo,
oder einfach mit Suchen/Ersetzen in Excel:
Code: Sub Klammern_Mit_Inhalt_entfernen()
Dim vStr As String
vStr = "Die Klammern [Info 1] samt [Info 2] deren Inhalt [Info 3] entfernen."
Application.ScreenUpdating = False
With Workbooks.Add(xlWBATWorksheet).Sheets(1).Cells(1)
.Value = vStr
.Replace What:= "[*]", Replacement:="", _
LookAt:=xlPart, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
vStr = .Value
.Parent.Parent.Close False
End With
Application.ScreenUpdating = False
Debug.Print vStr
End Sub
[*]
Gruß Uwe
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi,
bei Edgars und Uwes Makros sind zu viel Leerzeichen im Ergebnis-String!
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hi Ralf,
(31.05.2016, 08:07)Rabe schrieb: Hi,
bei Edgars und Uwes Makros sind zu viel Leerzeichen im Ergebnis-String!
das war zwar bei der Ursprungsfrage kein Thema, aber nun mit drin:
Code: Sub Klammern_Mit_Inhalt_entfernen_Kuwer()
Dim vStr As String
vStr = "Die Klammern [Info 1] samt [Info 2] deren Inhalt [Info 3] entfernen."
Application.ScreenUpdating = False
With Workbooks.Add(xlWBATWorksheet).Sheets(1).Cells(1)
.Value = vStr
.Replace What:="[*]", Replacement:="", _
LookAt:=xlPart, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
vStr = Application.Trim(.Value)
.Parent.Parent.Close False
End With
Application.ScreenUpdating = False
Debug.Print vStr
End Sub
[*]
Gruß Uwe
Registriert seit: 11.08.2014
Version(en): 2013
Hallo Leute,
warum nicht einfach mit einer Hilfszelle. Es werden schon nicht alle 16,7 Milliarden Zellen eines Tabellenblattes besetzt sein.
Code: Sub Die_Hilfszelle()
Dim vstr
vstr = "Die Klammern [Info 1] samt [Info 2] deren Inhalt [Info 3] entfernen."
Cells(Rows.Count, Columns.Count) = vstr
Cells(Rows.Count, Columns.Count).Replace " [*] ", " "
vstr = Cells(Rows.Count, Columns.Count)
Debug.Print vstr
End Sub
Registriert seit: 11.10.2014
Version(en): 12/2007&14/2010
Ja, RaBe,
du hast's gefunden! Von leicht habe ich hier allerdings nichts geschrieben, weil es inzwischen sehr viele Erwähnungen dieser UDF im dortigen und auch anderen Archiven gibt; ist ja immerhin schon 11 Jahre alt! Und Google zeigt auch nicht immer die Treffer in chronologischer Reihenfolge.
Übrigens, Probleme mit überzähligen Leerzeichen gibt's bei MaskOn nicht, die wdn alle auf eines reduziert und am Satz-/Wort-Anfang/-Ende eliminiert.
Gruß, L.A.Castor
|