تونی دارای یک دسته داده در یک کاربرگ است که از ارقام و کاراکترهای دیگر تشکیل شده است. به عنوان مثال، او ممکن است یک سلول حاوی "1234567Blue" داشته باشد. تونی می خواهد بتواند موقعیت شخصیتی را که در آن اولین کاراکتر غیر رقمی رخ می دهد، تشخیص دهد. در مثال متن "1234567Blue" تونی می خواهد راهی برای تشخیص اینکه اولین کاراکتر غیر رقمی در موقعیت 8 است.
دو راه اصلی برای به دست آوردن ارزش مورد نظر وجود دارد. اولین مورد استفاده از فرمول آرایه برای محاسبه موقعیت است. فرمول آرایه زیر (وارد شده با استفاده از Ctrl+Shift+Enter) در اکثر موارد کار خواهد کرد:
=MATCH(TRUE,ISERROR(VALUE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))),0)
تنها مواردی که این فرمول آرایه کار نمی کند این است که سلول A1 خالی باشد یا حاوی یک مقدار کاملاً عددی باشد. اگر لیست شما ممکن است حاوی این نوع داده باشد (یا اصلاً داده ای نداشته باشد)، باید از یک فرمول آرایه کمی طولانی تر استفاده کنید:
=IF(LEN(A1)=0,0,MIN(IF(1*ISNUMBER(1*MID(A1,ROW(INDIRECT("A1:A"&
LEN(A1))),1))=0,ROW(INDIRECT("A1:A"&LEN(A1))),LEN(A1)+1)))*
(ISNUMBER(A1)=FALSE)
به یاد داشته باشید که این فرمول یک آرایه واحد است که با استفاده از Ctrl+Shift+Enter وارد می شود. مواردی را که A1 فاقد نویسه های غیر رقمی است (مانند یک سلول خالی یا مقداری مانند "123") به درستی مدیریت می کند.
یکی دیگر از فرمول های آرایه ممکن که باید موقعیت مورد نظر را برگرداند، موارد زیر است. این یکی باید سلول های خالی و مقادیر کاملاً عددی را به خوبی مدیریت کند، اما از فرمول آرایه ارائه شده قبلی کوتاه تر است:
=IFERROR(MATCH(1,ISERR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1)*1,),)
البته، راه دیگری که می توانید موقعیت اولین کاراکتر غیر رقمی را پیدا کنید، ایجاد یک تابع تعریف شده توسط کاربر است. راه های مختلفی برای پیاده سازی چنین ماکرو وجود دارد. یکی از ساده ترین راه ها برای پیاده سازی ماکرو این است که به سادگی از طریق هر کاراکتری در هر چیزی که به ماکرو منتقل می شود، قدم بگذارید. وقتی کاراکتری پیدا شد که خارج از محدوده کد ASCII برای ارقام (48 تا 57) است، پس می دانید که موقعیت اول را پیدا کرده اید. ماکرو زیر راهی برای انجام این نوع تکنیک نشان می دهد:
Function FirstNonDigit(str As String)
Dim iChar As Integer
Dim iPos As Integer
Dim J As Integer
Application.Volatile
iPos = 0
For J = 1 To Len(str)
iChar = Asc(Mid(str, J, 1))
If iChar <= 47 Or iChar >= 58 Then
iPos = J
Exit For
End If
Next J
FirstNonDigit = iPos
End Function
برای استفاده از تابع، به سادگی از فرمولی مانند این در کاربرگ خود استفاده کنید:
=FirstNonDigit(A1)
اگر سلولی که به آن ارجاع می دهید خالی باشد یا فقط حاوی اعداد باشد، تابع مقدار 0 را برمی گرداند.