Подстановочные знаки в тексте “Заменить на”

Энн-Ми понимает, что может использовать подстановочные знаки (*?) для поиска в Excel, но ей интересно, может ли она использовать подстановочные знаки в строке замены. Например, она хотела бы найти «ab * de» и заменить его на «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 для выполнения фактических замен.

Открытая функция 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 Если reg.Test (TestString) Тогда reg.Pattern = Pattern2 SearchNReplace = reg.Replace ( TestString, ReplaceString) Else SearchNReplace = TestString End IfEnd Function

Чтобы использовать этот макрос, начните со строк, которые вы хотите изменить в столбце A. Предполагая, что первая строка находится в ячейке A1, вы можете поместить следующее в другую ячейку, чтобы получить измененный текст:

= SearchNReplace1 («^ ab. * de $ «,» ^ ab «,» aa «, A1)

Это сообщает макросу, что шаблон, который вы хотите искать, это” ^ ab. * de $ “(первый параметр ), и вы хотите заменить «^ ab» на «aa». Эту формулу можно вставить в столбец, и вы получите преобразование столбца A, в котором строка «ab * de» заменяется на «aa *. de “.

Если вы используете старую версию 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 = «sReplaceInitial =» sReplaceInitial = » «Для каждого выделенного rCell sTemp = rCell .Value iLenInitial = Len (sFindInitial) iLenFinal = Len (sFindFinal) Если Left (sTemp, iLenInitial) = sFindInitial And _ Right (sTemp, iLenFinal) = sFindFinal Тогда sTemp = Mid (sTemp, 1) sInitial Len (sTemp) — iLenFinal) sTemp = sReplaceInitial & sTemp & sReplaceFinal rCell.Value = sTemp End If Next Set rCell = NothingEnd Sub

Чтобы использовать эту процедуру, просто выберите ячейки, которые вы хотите изменить, а затем выполните макрос. При необходимости следует также внести изменения в переменные sFindInitial, sReplaceInitial, sFindFinal и sReplaceFinal.

Источник: frestage.ru

Бытовой вопрос