برایان یک کاربرگ دارد که سلولهای زیادی دارد که حروف الفبایی در آنها وجود دارد. او به دنبال راهی برای خلاص شدن از شر آن شخصیت های الفبایی است، مهم نیست در کجای سلول ظاهر می شوند. به عنوان مثال، اگر سلول حاوی "ABC123" باشد، برایان می خواهد از شر "ABC" خلاص شود و فقط "123" باقی بماند. به طور مشابه، "A3B2C1" باید "321" و "#45P*%" باید به "#45*%" تبدیل شود.
تنها راه حل این مشکل استفاده از ماکروها است. اگر میخواهید به سادگی کاراکترها را در جای خود حذف کنید، میتوانید این کار را با انتخاب سلولهایی که میخواهید روی آنها تأثیر بگذارید و سپس اجرای یک ماکرو که هر سلول را بررسی میکند و کاراکترهای توهینآمیز را حذف میکند، انجام دهید. راه های زیادی برای انجام این کار وجود دارد. ماکرو زیر یک رویکرد ساده است.
Sub CleanText1()
Dim rngCell As Range
Dim intChar As Integer
Dim strCheckString As String
Dim strCheckChar As String
Dim intCheckChar As Integer
Dim strClean As String
For Each rngCell In Selection
strCheckString = rngCell.Value
strClean = ""
For intChar = 1 To Len(strCheckString)
strCheckChar = Mid(strCheckString, intChar, 1)
intCheckChar = Asc(strCheckChar)
Select Case intCheckChar
Case 65 To 90 upper case chars
Do nothing
Case 97 To 122 lower case chars
Do nothing
Case 128 To 151 special language chars
Do nothing
Case 153 To 154 special language chars
Do nothing
Case 159 To 165 special language chars
Do nothing
Case Else
strClean = strClean & strCheckChar
End Select
Next intChar
rngCell.Value = strClean
Next rngCell
End Sub
نکته خوب در مورد این رویکرد برای حذف کاراکترها این است که می توانید به سادگی با تغییر آنچه که علامت زده شده (و اقدامات انجام شده) در ساختار Select Case به راحتی از شر شخصیت های دیگر خلاص شوید.
اگر نمیخواهید سلولهای اصلی را تغییر دهید، یک روش خوب این است که یک تابع تعریفشده توسط کاربر را کنار هم قرار دهید که یک نسخه «تمیز» از یک رشته را برمیگرداند. این را می توان با ایجاد چند تغییر در ماکرو قبلی به دست آورد.
Function CleanText2(ByVal sRaw As String) As String
Dim intChar As Integer
Dim strCheckString As String
Dim strCheckChar As String
Dim intCheckChar As Integer
Dim strClean As String
Application.Volatile
strClean = ""
For intChar = 1 To Len(sRaw)
strCheckChar = Mid(sRaw, intChar, 1)
intCheckChar = Asc(strCheckChar)
Select Case intCheckChar
Case 65 To 90 upper case chars
Do nothing
Case 97 To 122 lower case chars
Do nothing
Case 128 To 151 special language chars
Do nothing
Case 153 To 154 special language chars
Do nothing
Case 159 To 165 special language chars
Do nothing
Case Else
strClean = strClean & strCheckChar
End Select
Next intChar
CleanText2 = strClean
End Function
برای استفاده از تابع، می توانید فرمولی مانند زیر را در یک سلول قرار دهید:
=CleanText2(A1)
نتیجه این است که فرمول یک نسخه "تمیز" از هر آنچه در سلول A1 است را بدون ایجاد اختلال در محتوای سلول A1 برمی گرداند.
روش دیگر این است که در ماکرو تعریف کنید که چه کاراکترهایی مجاز هستند در متن شما باقی بمانند. به این ترتیب می توانید ماکرو را تا حدی ساده کنید. این نسخه به عنوان یک تابع تعریف شده توسط کاربر انجام می شود، همچنین:
Function CleanText3(ByVal sRaw As String) As String
Dim J As Integer
Dim sTemp As String
Dim sClean As String
Const OK = "0123456789#$%&+-*/"
Application.Volatile
sClean = ""
For J = 1 To Len(sRaw)
sTemp = Mid(sRaw, J, 1)
If InStr(OK, sTemp) Then sClean = sClean & sTemp
Next J
CleanText3 = sClean
End Function
ترفند در این رویکرد این است که مطمئن شوید به کاراکترهایی که می خواهید در رشته پردازش شده اجازه دهید فکر کنید. همه این کاراکترها باید در ثابت OK گنجانده شوند.