Энн-Ми понимает, что может использовать подстановочные знаки (?) Для поиска в 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 [Подстановочные знаки в« Заменить текстом »]«.