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. REGEX wurde zu Visual Basic 6.0 hinzugefügt, was bedeutet, dass es in Excel 2003 zu Excel’s VBA gelangt ist. Der erste Schritt bei der Verwendung von REGEX besteht darin, es zu aktivieren. Sie tun dies im VBA-Editor, indem Sie Extras | wählen Verweise und stellen Sie dann sicher, dass neben der Option Microsoft VBScript Regular Expressions 5.5 ein Häkchen angezeigt wird.

Durch Aktivieren dieser Referenz können Sie REGEX-Objekte erstellen. Diese Objekte besitzen eine Testmethode und eine Pattern-Eigenschaft. Dies bedeutet, dass Sie die Pattern-Eigenschaft festlegen und anschließend 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         SearchNReplace = reg.Replace(TestString, ReplaceString)

Else         SearchNReplace = 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 eine ältere Version von Excel verwenden, mit der Sie keine REGEX-Objekte erstellen können, oder wenn Sie dies lieber nicht möchten, können Sie ein Makro erstellen, das einfach eine Gruppe ausgewählter Zellen durchläuft und nach einer beliebigen Zelle sucht das beginnt mit „ab“ und endet mit „de“ und 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 (3303) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: