تری همیشه از تابع کاربرگ PROPER برای تغییر حروف کوچک متن در کاربرگ های خود استفاده می کند. او تعجب می کند که آیا راهی برای دستور دادن به تابع برای نادیده گرفتن برخی کلمات وجود دارد، به طوری که آنها با حرف بزرگ شروع نشده باشند. برای او غیرعادی نیست که پس از استفاده از PROPER به عقب برگردد و کلماتی مانند "the" یا "an" را به تمام حروف کوچک تغییر دهد. اگر PROPER بتواند از تغییر خودکار چنین کلماتی صرف نظر کند، کمک بزرگی خواهد بود.
یکی از راههای نزدیک شدن به این موضوع، استفاده از تابع کاربرگ SUBSTITUTE در ارتباط با تابع PROPER است. به عنوان مثال، اگر می خواهید نمونه هایی از کلمه "The" را با "the" پیدا کنید، می توانید از موارد زیر استفاده کنید:
=SUBSTITUTE(PROPER(A1)," The "," the ")
به گنجاندن فضای قبل و بعد از آنچه جستجو میکنید و چیزی که جایگزین میکنید توجه کنید. این تضمین می کند که فقط کلمات کامل اصلاح شوند. همچنین مطمئن می شود که هیچ تغییری در ابتدای مقدار سلول یا در انتهای آن ایجاد نشود.
اگر میخواهید کلمات دیگری را که نیاز به جایگزینی دارند جستجو کنید، میتوانید به سادگی تعداد نمونههای SUBSTITUTE را در فرمول افزایش دهید:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(PROPER(A1)," The ",
" the ")," An "," an ")," And "," and ")
این بدیهی است که اگر کلمات زیادی دارید که میخواهید آنها را از اصلاح حذف کنید، ممکن است کمی ناخوشایند باشد. در این صورت باید به استفاده از ماکرو متوسل شوید. ماکرو زیر که به عنوان یک تابع تعریف شده توسط کاربر نوشته شده است، می تواند برای تبدیل تمام کلمات یک سلول به حروف اولیه (درست مانند PROPER) استفاده شود، اما مطمئن شوید که برخی از کلمات تعریف شده کوچک هستند.
Function Title(ByVal ref As Range) As String
Dim vaArray As Variant
Dim c As String
Dim i As Integer
Dim J As Integer
Dim vaLCase As Variant
Dim str As String
Array contains terms that should be lower case
vaLCase = Array("a", "an", "and", "in", "is", _
"of", "or", "the", "to", "with")
c = StrConv(ref, 3)
split the words into an array
vaArray = Split(c, " ")
For i = (LBound(vaArray)+1) To UBound(vaArray)
For J = LBound(vaLCase) To UBound(vaLCase)
compare each word in the cell against the
list of words to remain lowercase. If the
Upper versions match then replace the
cell word with the lowercase version.
If UCase(vaArray(i)) = UCase(vaLCase(J)) Then
vaArray(i) = vaLCase(J)
End If
Next J
Next i
rebuild the sentence
str = ""
For i = LBound(vaArray) To UBound(vaArray)
str = str & " " & vaArray(i)
Next i
Title = Trim(str)
End Function
برای استفاده از ماکرو، تنها کاری که باید انجام دهید این است که از موارد زیر در کاربرگ خود استفاده کنید:
=Title(A1)
همچنین می توانید یک رویکرد اضافی برای انجام تبدیل مورد نظر در این سایت پیدا کنید:
http://dmcritchie.mvps.org/excel/proper.htm