گری یک کاربرگ دارد که شامل رشته های متنی بدون ساختار است که باید آنها را به عناصر جزء تجزیه کند. گاهی اوقات او نیاز به جستجوی انواع متن دارد تا یک شخصیت خاص. برای مثال، او ممکن است بخواهد اولین، Nامین یا آخرین رخداد هر کاراکتر پررنگ (یا هر کاراکتر مورب) را در سلول پیدا کند.
هیچ تابع یا ابزار ذاتی در اکسل برای انجام این کار وجود ندارد. ویژگی معمولی Find and Replace موارد منطبق را برای قالب بندی برمی گرداند، اما موقعیتی را که در آن مطابقت ها اتفاق می افتد، برمی گرداند. برای اینکه دقیقاً در مورد چیزی که می خواهید پیدا کنید، باید از یک ماکرو استفاده کنید. اگر ماکرو را به عنوان یک تابع تعریف شده توسط کاربر پیاده سازی کنید، می توانید اطلاعات موقعیت یابی را به کاربرگ خود برگردانید.
ماکرو زیر یک محدوده (در نظر گرفته شده برای یک سلول خاص) را می پذیرد، نشانگر این است که آیا شما می خواهید پررنگ یا مورب (یا هر دو)، و وقوع آن قالب بندی را بپذیرید.
Function FindNth(r As Range, sType As String, N As Integer) As Integer
Dim J As Integer
Dim iCount As Integer
Dim sStyle As String
If r.Count = 1 Then
FindNth = 0
iCount = 0
For J = 1 To Len(r.Text)
sStyle = r.Characters(J, 1).Font.FontStyle
If LCase(sStyle) = LCase(sType) Then
iCount = iCount + 1
If N = 0 Then
FindNth = J
Else
If N = iCount Then
FindNth = J
Exit For
End If
End If
End If
Next J
Else
FindNth = -1
End If
End Function
برای استفاده از ماکرو، از یکی از فرمول های زیر در کاربرگ خود استفاده کنید:
=FindNth(A1, "bold", 2)
=FindNth(A1, "italic", 3)
=FindNth(A1, "bold italic", 1)
در هر مورد، پارامتر سوم مشخص می کند که کدام رخداد قالب بندی داده شده را می خواهید پیدا کنید. تابع موقعیت کاراکتر آن رخداد را در داخل سلول برمی گرداند. اگر چنین اتفاقی وجود نداشته باشد، 0 برگردانده می شود. اگر چندین سلول را در پارامتر اول تابع مشخص کنید، یک -1 را برمی گرداند. اگر یک رخداد 0 را مشخص کنید، موقعیت کاراکتر آخرین وقوع از فرمت مشخص شده برمی گردد.