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