Подстановочные знаки в тексте «Заменить на» (Microsoft Excel)
Энн-Ми понимает, что может использовать подстановочные знаки (?) Для поиска в Excel, но ей интересно, может ли она использовать подстановочные знаки в строке замены. Например, она хотела бы найти «abde» и заменить его на «aa * de», где звездочка представляет любое количество символов или вообще ни одного.
Короткий ответ заключается в том, что в Excel нет способа сделать это, как описано. Если вы хотите преобразовать только второй символ текстового значения из «b» в «a», то это можно сделать довольно легко:
=REPLACE(A1,2,1,"a")
Однако это, вероятно, не то, что вы хотите делать; вам нужен способ использования подстановочных знаков в тексте «заменить на». Технический термин для выполнения таких замен строк называется REGEX, что является сокращением от Regular Expressions. REGEX начался с таких языков, как Perl, но был настолько мощным, что многие другие языки программирования добавили его.
VBA, используемый в Excel, не является исключением. Первый шаг в использовании REGEX — включить его. Это можно сделать в редакторе VBA, выбрав Инструменты | Ссылки, а затем убедитесь, что рядом с параметром Microsoft VBScript Regular Expressions стоит галочка. Если доступно несколько версий справочника, выберите последнюю версию.
Включение этой ссылки позволяет создавать объекты REGEX. Технически вы можете оставить его выключенным, в зависимости от того, как вы хотите, чтобы привязка происходила в ваших макросах. Обсуждение плюсов и минусов последнего по сравнению с
Однако раннее связывание выходит за рамки этого совета, поэтому просто включите ссылку REGEX.
Объекты REGEX обладают методом Test и свойством Pattern. Это означает, что вы устанавливаете свойство Pattern, а затем метод Test проверяет, существует ли шаблон. У объекта REGEX также есть метод Replace, который используется для замены.
Прежде чем продолжить, важно понять, что регулярные выражения могут быть очень сложными и, в общем, «вызывающими». Нет никакого способа обойти это; тому, как работать с регулярными выражениями, посвящены целые книги. К счастью, для целей этой подсказки выражения довольно просты по своей природе. В этом случае мы будем использовать шаблон «^ ab.de $». Этот шаблон относится к слову, которое начинается (обозначено ^) с «ab», за которым следует произвольное выражение (обозначено)
состоящий как минимум из одного символа (обозначенного точкой) и оканчивающегося (обозначенного знаком $) на «de».
Вот код, который реализует использование объекта REGEX для фактических замен.
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
Чтобы использовать этот макрос, начните со строк, которые вы хотите изменить в столбце A. Предполагая, что первая строка находится в ячейке A1, вы можете поместить следующее в другую ячейку, чтобы получить измененный текст:
=SearchNReplace1("^ab.*de$","^ab","aa",A1)
Это сообщает макросу, что шаблон, который вы хотите найти, — это «^ ab. * De $»
(первый параметр) и что вы хотите заменить «^ ab» на «aa».
Эту формулу можно вставить в столбец, и вы получите преобразование столбца A, в котором строка «abde» заменяется на «aade».
Если вы по какой-то причине предпочитаете не использовать выражения REGEX в VBA, вы можете создать макрос, который будет просто проходить через группу выбранных ячеек и искать любую ячейку, которая начинается с «ab» и заканчивается на «de», и затем заменяет начальную часть на «аа».
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
Чтобы использовать эту процедуру, просто выберите ячейки, которые вы хотите изменить, а затем выполните макрос. При необходимости следует также внести изменения в переменные sFindInitial, sReplaceInitial, sFindFinal и sReplaceFinal.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (11170) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
`link: / excel-Wildcards_in_Replace_With_Text [Подстановочные знаки в« Заменить текстом »]«.