Anne-Mie متوجه می شود که می تواند از علامت های عام (*؟) برای جستجو در اکسل استفاده کند، اما نمی داند که آیا می تواند از حروف عام در رشته جایگزین استفاده کند. به عنوان مثال، او می خواهد «ab*de» را جستجو کند و آن را با «aa*de» جایگزین کند، جایی که ستاره نشان دهنده هر تعداد کاراکتر یا هیچ کدام است.
پاسخ کوتاه این است که همانطور که توضیح داده شد هیچ راهی برای انجام این کار در اکسل وجود ندارد. اگر فقط می خواهید کاراکتر دوم یک مقدار متن را از "b" به "a" تبدیل کنید، این کار را می توان به راحتی انجام داد:
=REPLACE(A1,2,1,"a")
با این حال، احتمالاً این چیزی نیست که شما می خواهید انجام دهید. شما راهی برای استفاده از حروف عام در متن "جایگزینی با" می خواهید. اصطلاح فنی برای انجام چنین جایگزینی رشته ها REGEX نامیده می شود که مخفف عبارت Regular Expression است. REGEX با زبان هایی مانند Perl شروع شد اما آنقدر قدرتمند بود که بسیاری از زبان های برنامه نویسی دیگر آن را به آن اضافه کردند.
VBA مورد استفاده در اکسل نیز از این قاعده مستثنی نیست. اولین قدم در استفاده از REGEX روشن کردن آن است. این کار را در ویرایشگر VBA با انتخاب Tools | انجام می دهید مراجع و سپس اطمینان از وجود یک علامت تیک در کنار گزینه Microsoft VBScript Regular Expressions. اگر بیش از یک نسخه از مرجع موجود است، آخرین نسخه را انتخاب کنید.
فعال کردن این مرجع به شما امکان می دهد اشیاء REGEX ایجاد کنید. از نظر فنی، بسته به اینکه می خواهید اتصال در ماکروهایتان چگونه اتفاق بیفتد، می توانید آن را خاموش بگذارید. بحث در مورد مزایا و معایب اتصال دیرهنگام و اولیه فراتر از محدوده این نکته است، بنابراین فقط ادامه دهید و مرجع REGEX را روشن کنید.
اشیاء REGEX دارای یک متد تست و یک ویژگی Pattern هستند. این به این معنی است که شما ویژگی Pattern را تنظیم می کنید و سپس روش Test بررسی می کند که آیا الگو وجود دارد یا خیر. یک شی REGEX همچنین دارای یک متد Replace است که برای انجام جایگزینی استفاده می شود.
قبل از ادامه، درک این نکته مهم است که عبارات منظم می توانند بسیار پیچیده و «گیک» باشند. هیچ راه حلی در این مورد نیست؛ نحوه کار با عبارات منظم موضوع کل کتاب ها بوده است. خوشبختانه، برای اهداف این نکته، عبارات ماهیت نسبتاً ساده ای دارند. در این مورد به خوبی از الگوی "^ab.*de$" استفاده کنید. این الگو به کلمه ای اشاره دارد که (با علامت ^) با "ab" شروع می شود و پس از آن یک عبارت دلخواه (با علامت *) متشکل از حداقل یک کاراکتر (که با نقطه نشان داده می شود) و پایان می یابد (با علامت $) با "" پایان می یابد. د".
در اینجا کدی وجود دارد که استفاده از شی 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 مواجه می شوید که در آن رشته "ab*de" با "aa*de" جایگزین می شود.
اگر به دلایلی ترجیح می دهید از عبارات REGEX در VBA استفاده نکنید، می توانید یک ماکرو ایجاد کنید که به سادگی از میان گروهی از سلول های انتخاب شده عبور می کند و هر سلولی را که با "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 ایجاد کنید.