مانند بسیاری از افراد، کرک اطلاعات را در کاربرگ های اکسل کپی می کند که از مکان های دیگر سرچشمه می گیرند. اطلاعاتی که کرک معمولاً کپی می کند همه با حروف CAPS هستند، و او می خواهد آن ها را به چیزی تبدیل کند که اکسل از آن به عنوان "مورد مناسب" یاد می کند (فقط حرف اول هر کلمه بزرگ می شود). مشکل این است که تابع کاربرگ PROPER که تبدیل را انجام می دهد، به کلماتی که با حروف بزرگ نوشته شده است توجه نمی کند. بنابراین، کلماتی مانند a، an، in، و، the، و with همگی دارای سرپوش اولیه هستند. کرک نمی خواهد آن کلمات (و شاید برخی دیگر) با حروف بزرگ نوشته شوند.
راه های مختلفی برای حل این مشکل وجود دارد. یکی استفاده از یک فرمول نسبتا طولانی برای انجام تبدیل است:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(
SUBSTITUTE(SUBSTITUTE(PROPER($B$13);" A ";" a ");
" An ";" an ");" In ";" in ");" And ";" and ");
" The ";" the ");" With ";" with ")
به یاد داشته باشید، این همه یک فرمول واحد است. تبدیل حروف بزرگ را انجام می دهد، اما سپس کلمات کوچک مورد نظر (a، an، in، و، the، با) را جایگزین می کند. در حالی که این کار نسبتاً آسان است، با افزایش تعداد کلماتی که باید برای آنها جایگزین شود، کاربرد فرمول محدود می شود.
شاید یک رویکرد بهتر استفاده از یک ماکرو تابع تعریف شده توسط کاربر برای انجام تبدیل حروف برای شما باشد. تابع زیر برخی از کلمات متداول را که نباید حروف اولیه داشته باشند بررسی می کند و مطمئن می شود که حروف کوچک هستند.
Function MyProper(str As String)
Dim vExclude
Dim i As Integer
vExclude = Array("a", "an", "in", "and", _
"the", "with", "is", "at")
Application.Volatile
str = StrConv(str, vbProperCase)
For i = LBound(vExclude) To UBound(vExclude)
str = Application.WorksheetFunction. _
Substitute(str, " " & _
StrConv(vExclude(i), vbProperCase) _
& " ", " " & vExclude(i) & " ")
Next
MyProper = str
End Function
کلمات را می توان به آرایه اضافه کرد و کد به طور خودکار اضافات را حس می کند و کلمات اضافه شده را بررسی می کند. همچنین توجه داشته باشید که کد هنگام بررسی خود، قبل و بعد از هر کلمه در آرایه یک فاصله اضافه می کند. این به این دلیل است که کدی را ندارید که در کلمات جزئی (مانند "و" در "ایستاده") یا کلمات در ابتدای جمله تغییرات ایجاد کند. شما می توانید تابع را در یک کاربرگ به این ترتیب استفاده کنید:
=MyProper(B7)
این استفاده متن اصلاح شده را بدون تنظیم متن اصلی در B7 برمی گرداند.
اگر ترجیح می دهید، می توانید از تابعی استفاده کنید که فهرست کلمات خود را از یک محدوده نامگذاری شده در ورک بوک می گیرد. تابع زیر از محدوده سلولی به نام MyList با یک کلمه در هر سلول استفاده می کند. فرض بر این است که این لیست در یک کاربرگ به نام WordList است.
Function ProperSpecial(cX As Range)
rng = target Cell
Dim c As Range
Dim sTemp As String
sTemp = Application.WorksheetFunction.Proper(cX.Value)
For Each c In Worksheets("WordList").Range("MyList")
sTemp = Application.WorksheetFunction.Substitute( _
sTemp, Application.WorksheetFunction.Proper( _
" " & c.Value & " "), (" " & c.Value & " "))
Next c
ProperSpecial = sTemp
End Function