باری اغلب خود را می خواهد تا Nامین اتفاق یک کاراکتر را در یک رشته متن شناسایی کند. او می داند که می تواند از توابع SEARCH و FIND کاربرگ برای یافتن یک رخداد اولیه استفاده کند، اما مطمئن نیست که چگونه می تواند، مثلاً، سومین وقوع حرف "B" را در یک رشته متن پیدا کند.
در واقع، تابع SEARCH می تواند برای یافتن رخداد مورد نظر به روش زیر استفاده شود:
=SEARCHB("b",G20,(SEARCHB("b",G20,(SEARCHB("b",G20,1)+1))+1))
به نحوه استفاده از تابع SEARCHB به صورت تودرتو توجه کنید. فرمول مشخص می کند که چه چیزی جستجو می شود (حرف "b") و تعداد سطوح تودرتو نشان می دهد که کدام رخداد در سلول را می خواهید پیدا کنید. فرمول موقعیت کاراکتر مورد نظر را در داخل سلول برمی گرداند.
البته مشکل چنین فرمولی این است که نگهداری از آن دشوار است و اگر بخواهید مثلاً هفتمین مورد را پیدا کنید، به سرعت غیرقابل استفاده می شود.
یک فرمول انعطاف پذیرتر به صورت زیر خواهد بود:
=FIND(CHAR(1),SUBSTITUTE(A1,"B",CHAR(1),3))
این فرمول مقدار A1 را بررسی می کند. این کد CHAR(1) را برای سومین رخداد "B" در سلول جایگزین می کند. سپس تابع FIND به دنبال موقعیتی که CHAR(1) در آن رخ می دهد، در رشته حاصل می گردد. اگر رخداد مورد نظر وجود نداشته باشد، فرمول یک خطای #VALUE را برمی گرداند.
اگر ترجیح می دهید، می توانید یک تابع تعریف شده توسط کاربر ایجاد کنید که به دنبال موقعیت N ام یک کاراکتر باشد. ماکرو زیر یک ماکرو بسیار ساده است که سه آرگومان دارد: رشته ای که باید جستجو شود، متنی که باید مطابقت داشته باشد و موقعیت مورد نظر.
Function FindN(sFindWhat As String, _
sInputString As String, N As Integer) As Integer
Dim J As Integer
FindN = 0
For J = 1 To N
FindN = InStr(FindN + 1, sInputString, sFindWhat)
If FindN = 0 Then Exit For
Next
End Function
تابع در مواردی که جستجو می کند به حروف بزرگ و کوچک حساس است و موقعیتی را در رشته مشخص شده که در آن مقدار sFindWhat رخ می دهد، برمی گرداند. اگر در نمونه مشخص شده اتفاقی وجود نداشته باشد، تابع 0 را برمی گرداند. موارد زیر نشان می دهد که چگونه می توان از تابع در یک کاربرگ استفاده کرد:
=FindN("b",C15,3)