Подстановочные знаки в тексте «Заменить на» (Microsoft Excel)
Энн-Ми понимает, что может использовать подстановочные знаки (?) Для поиска в Excel, но ей интересно, может ли она использовать подстановочные знаки в строке замены. Например, она хотела бы найти «abde» и заменить его на «aa * de», где звездочка представляет любое количество символов или вообще ни одного.
Короткий ответ заключается в том, что в Excel нет способа сделать это, как описано. Если вы хотите преобразовать только второй символ текстового значения из «b» в «a», то это можно сделать довольно легко:
=REPLACE(A1,2,1,"a")
Однако это, вероятно, не то, что вы хотите делать; вам нужен способ использования подстановочных знаков в тексте «заменить на». Технический термин для выполнения таких замен строк называется REGEX, что является сокращением от Regular Expressions. REGEX начался с таких языков, как Perl, но был настолько мощным, что многие другие языки программирования добавили его.
VBA, используемый в Excel, не является исключением. REGEX был добавлен в Visual Basic 6.0, что означает, что он попал в VBA Excel в Excel 2003. Первый шаг в использовании REGEX — его включение. Это можно сделать в редакторе VBA, выбрав Инструменты | Ссылки, а затем убедитесь, что рядом с параметром Microsoft VBScript Regular Expressions 5.5 стоит галочка.
Включение этой ссылки позволяет создавать объекты 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 SearchNReplace = reg.Replace(TestString, ReplaceString) Else SearchNReplace = TestString End If End Function
Чтобы использовать этот макрос, начните со строк, которые вы хотите изменить в столбце A. Предполагая, что первая строка находится в ячейке A1, вы можете поместить следующее в другую ячейку, чтобы получить измененный текст:
=SearchNReplace1("^ab.*de$","^ab","aa",A1)
Это сообщает макросу, что шаблон, который вы хотите найти, — это «^ ab. * De $»
(первый параметр) и что вы хотите заменить «^ ab» на «aa».
Эту формулу можно вставить в столбец, и вы получите преобразование столбца A, в котором строка «abde» заменяется на «aade».
Если вы используете старую версию Excel, которая не позволяет вам создавать объекты REGEX, или если вы предпочитаете не делать этого, вы можете создать макрос, который будет просто проходить через группу выбранных ячеек и искать любую ячейку. который начинается с «ab» и заканчивается «de», а затем заменяет начальную часть на «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
Чтобы использовать эту процедуру, просто выберите ячейки, которые вы хотите изменить, а затем выполните макрос. При необходимости следует также внести изменения в переменные sFindInitial, sReplaceInitial, sFindFinal и sReplaceFinal.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (3303) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:
link: / excelribbon-Wildcards_in_Replace_With_Text [Подстановочные знаки в 'Заменить текстом']
.