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
30.05.2016, 14:49
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2016, 14: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, 05:09
(Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2016, 05:38 von Rabe.)
Hi Luc, (31.05.2016, 02: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.htmmit 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, 07:11
(Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2016, 07: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, 09: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
|