Platzhalter in ‚Ersetzen durch‘ Text (Microsoft Excel)
Anne-Mie erkennt, dass sie Platzhalter (?) Verwenden kann, um in Excel zu suchen, fragt sich jedoch, ob sie Platzhalter in der Ersetzungszeichenfolge verwenden kann. Zum Beispiel möchte sie nach „abde“ suchen und durch „aa * de“ ersetzen, wobei das Sternchen eine beliebige Anzahl von Zeichen oder gar keine darstellt.
Die kurze Antwort lautet, dass dies in Excel wie beschrieben nicht möglich ist. Wenn Sie nur das zweite Zeichen eines Textwerts von „b“ in „a“ konvertieren möchten, können Sie dies ganz einfach tun:
=REPLACE(A1,2,1,"a")
Dies ist jedoch wahrscheinlich nicht das, was Sie tun möchten. Sie möchten eine Möglichkeit verwenden, Platzhalter im Text „Ersetzen durch“ zu verwenden. Der Fachbegriff für das Ersetzen solcher Zeichenfolgen heißt REGEX, was für Regular Expressions steht. REGEX begann mit Sprachen wie Perl, war aber so leistungsfähig, dass viele andere Programmiersprachen ihn hinzufügten.
Der in Excel verwendete VBA ist keine Ausnahme. Der erste Schritt bei der Verwendung von REGEX ist das Einschalten. Sie tun dies im VBA-Editor, indem Sie Extras | wählen Verweise und stellen Sie dann sicher, dass neben der Option für reguläre Microsoft VBScript-Ausdrücke ein Häkchen angezeigt wird. Wenn mehr als eine Version der Referenz verfügbar ist, wählen Sie die neueste Version aus.
Durch Aktivieren dieser Referenz können Sie REGEX-Objekte erstellen. Technisch gesehen können Sie es deaktiviert lassen, je nachdem, wie die Bindung in Ihren Makros erfolgen soll. Eine Diskussion über die Vor- und Nachteile der letzten vs.
Eine frühzeitige Bindung würde den Rahmen dieses Tipps jedoch sprengen. Schalten Sie also einfach die REGEX-Referenz ein.
REGEX-Objekte besitzen eine Testmethode und eine Pattern-Eigenschaft. Dies bedeutet, dass Sie die Pattern-Eigenschaft festlegen und dann mit der Testmethode prüfen, ob das Pattern vorhanden ist. Ein REGEX-Objekt verfügt auch über eine Replace-Methode, mit der Ersetzungen durchgeführt werden.
Bevor Sie fortfahren, ist es wichtig zu verstehen, dass reguläre Ausdrücke sehr komplex und „geeky“ werden können. Daran führt kein Weg vorbei. Wie man mit regulären Ausdrücken arbeitet, war Gegenstand ganzer Bücher. Glücklicherweise sind die Ausdrücke für die Zwecke dieses Tipps recht einfach. In diesem Fall verwenden wir das Muster „^ ab.de $“. Dieses Muster bezieht sich auf ein Wort, das mit „ab“ beginnt (angezeigt durch ^), gefolgt von einem beliebigen Ausdruck (angezeigt durch)
bestehend aus mindestens einem Zeichen (angezeigt durch den Punkt) und endend (angezeigt durch das $) mit „de“.
Hier ist der Code, der die Verwendung des REGEX-Objekts implementiert, um die eigentlichen Ersetzungen durchzuführen.
Public Function SearchNReplace1(Pattern1 As String, _ Pattern2 As String, Replacestring As String, _ TestString As String) Dim reg As New RegExp reg.IgnoreCase = True reg.MultiLine = False reg.Pattern = Pattern1 If reg.Test(TestString) Then reg.Pattern = Pattern2 SearchNReplace1 = reg.Replace(TestString, ReplaceString) Else SearchNReplace1 = TestString End If End Function
Um dieses Makro zu verwenden, beginnen Sie mit den Zeichenfolgen, die Sie in Spalte A ändern möchten. Angenommen, die erste Zeichenfolge befindet sich in Zelle A1, können Sie Folgendes in eine andere Zelle einfügen, um den geänderten Text zu erhalten:
=SearchNReplace1("^ab.*de$","^ab","aa",A1)
Dies teilt dem Makro mit, dass das Muster, nach dem Sie suchen möchten, „^ ab. * De $“
ist (der erste Parameter), und dass Sie „^ ab“ durch „aa“ ersetzen möchten.
Diese Formel kann in die Spalte eingefügt werden, und Sie erhalten eine Konvertierung von Spalte A, bei der die Zeichenfolge „abde“ durch „aade“ ersetzt wird.
Wenn Sie aus irgendeinem Grund keine REGEX-Ausdrücke in VBA verwenden möchten, können Sie ein Makro erstellen, das einfach eine Gruppe ausgewählter Zellen durchläuft und nach Zellen sucht, die mit „ab“ beginnen und mit „de“ und enden ersetzt dann den Anfangsteil durch „aa“.
Sub SearchNReplace2() Dim sFindInitial As String Dim sReplaceInitial As String Dim iLenInitial As Integer Dim sFindFinal As String Dim sReplaceFinal As String Dim iLenFinal As Integer Dim sTemp As String Dim rCell As Range sFindInitial = "ab" sReplaceInitial = "aa" sFindFinal = "de" sReplaceFinal = "de" For Each rCell In Selection sTemp = rCell.Value iLenInitial = Len(sFindInitial) iLenFinal = Len(sFindFinal) If Left(sTemp, iLenInitial) = sFindInitial And _ Right(sTemp, iLenFinal) = sFindFinal Then sTemp = Mid(sTemp, iLenInitial + 1) sTemp = Left(sTemp, Len(sTemp) - iLenFinal) sTemp = sReplaceInitial & sTemp & sReplaceFinal rCell.Value = sTemp End If Next Set rCell = Nothing End Sub
Um diese Routine zu verwenden, wählen Sie einfach die Zellen aus, die Sie ändern möchten, und führen Sie dann das Makro aus. Sie sollten bei Bedarf auch Änderungen an den Variablen sFindInitial, sReplaceInitial, sFindFinal und sReplaceFinal vornehmen.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (11170) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365. Eine Version dieses Tippes für die ältere Menüoberfläche von Excel finden Sie hier: