جی باید سلولی را که در آن یک مقدار متن خاص وجود دارد، تعیین کند. او می داند که می تواند از قابلیت های Excels Find and Replace برای تعیین دستی آدرس سلول های حاوی مقدار متن استفاده کند، اما او به دنبال فرمولی برای تعیین آدرس سلول ها است. او فکر می کند که آیا راهی برای جستجوی قطعه متن در یک محدوده وجود دارد و اکسل آدرس سلولی را که متن در آن یافت می شود را بازگرداند.
دو چیز وجود دارد که می توانید امتحان کنید. ابتدا، اگر به دنبال یک تطابق دقیق برای محتویات سلول هستید، می توانید از یک فرمول استفاده کنید. فرمول اصلی این است:
=ADDRESS(MATCH(C2,A:A,0),1)
در این مثال، سلول C2 حاوی مقدار مورد نظر شما است و ستون A محدوده سلول های مورد جستجو است. فرمول بدون توجه به حروف بزرگ C2 یا مقادیر ستون A، نتیجه را برمیگرداند. بنابراین، اگر C2 حاوی "apple" باشد، فرمول به طور مثبت با سلولهایی که حاوی "apple"، "Apple" یا "APPLE" هستند مطابقت خواهد داشت. در واقع، هر ترکیبی از حروف بزرگ مطابقت دارد.
این فرمول آدرسی را برای سلولی که حاوی آنچه شما در میان متن دیگر جستجو می کنید، بر نمی گرداند. بنابراین اگر به دنبال "apple" (سلول C2) هستید، آدرس سلولی که حاوی عبارت "apple crisp" است را بر نمی گرداند. می توانید این رفتار را با افزودن کاراکترهای وحشی به سلول جستجو، کمی تغییر دهید. به عنوان مثال، اگر شما برای "*apple*" جستجو کنید، فرمول آدرس سلولی را که حاوی "apple" است، برمیگرداند، حتی اگر قبل یا بعد از آن نویسههای دیگر باشد.
لازم به ذکر است که این فرمول فقط آدرس اولین سلول در محدوده ای را برمی گرداند که معیارها را برآورده می کند. اگر واقعاً آدرس تمام سلولها را میخواهید که معیارها را برآورده کنند، باید به یک ماکرو تکیه کنید. مثال زیر یک مثال خوب است:
Function FindMe(x As Range, y As String) As String
Dim r As Range
Dim sResults As String
Dim sSearch As String
Application.Volatile
sSearch = LCase(y)
For Each r In x
If InStr(1, LCase(CStr(r.Value)), sSearch) > 0 Then
sResults = sResults & r.Address & ", "
End If
Next r
If Len(sResults) > 2 Then
FindMe = Left(sResults, Len(sResults) - 2)
Else
FindMe = ""
End If
End Function
شما از این تابع به سادگی با ارائه محدوده ای که می خواهید جستجو کنید به همراه آنچه می خواهید جستجو کنید استفاده می کنید:
=FindMe(A:A, "apple")
اگر از یک محدوده بزرگ استفاده میکنید (مانند این مثال - همه ستون A)، اگر این تابع زمان قابل توجهی را برای برگرداندن یک نتیجه صرف کند، تعجب نکنید. این منطقی است، زیرا باید در هر سلول در محدوده جستجو کند، صرف نظر از اینکه چیزی در سلول وجود دارد یا خیر.
همچنین نیازی به استفاده از حروف عام با این تابع نیست. فرض بر این است که اگر آنچه شما به دنبال آن هستید در هر نقطه ای از سلول قرار داشته باشد، تطابق رخ می دهد. همچنین به حروف بزرگ چیزی که به دنبال آن هستید یا حروف بزرگ هر چیزی در محدوده جستجو توجهی نمی کند.