جستجو کلمه در اکسل

۲

توابع زیادی در اکسل وجود داره که به تنهایی و یا ترکیبی در اکسل جستجو می کنند . اما سوال من اینه که با چه فرمول یا فنکشن می شه یک کلمه رو در یه محدوده از سلول ها پیدا کرد . البته بیاد داشته باشید این ” کلمه “ در یک عبارت چند کلمه ای در سلول ها قرار داره و در ضمن من نمی خوام از Ctrl + F استفاده کنم.
ویرایش۱: شاید ساده بنظر بیاد که سوال مسخره ای ایه ولی وقتی میخوای یک کلمه رو از دل ۸000۰ ردیف سلول بیرون بکشی و تو یه ستون دیگه قرار بدی ، خیلی سخت میشه.
یه جوونمرد اکسل دان پیدا نمیشه؟
هل من اکسلن ینصرونی؟!

انصراف

۲  پاسخ

۲
Sub Macro۱()
    Dim target As Range
    Dim found As Range

    Set target = Range("A۱:B۶")
    Set found = target.Find(What:="god", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
    If Not found Is Nothing Then
        found.Offset(, ۱).Value = "true"
    End If
End Sub

سلام دوباره. اول یک Range تعریف کردم به نام target و گفتم که این رنج چه محدوده‌ای رو شامل می‌شه. بعد تابع Find رو صدا زدم تا در محدوده‌ی target دنبال واژه‌ی god بگرده. خونه‌ای که پیدا می‌شه رو می‌ریزم توی found. بعد با استفاده از تابع Offset یک ستون جلوتر از خانه‌ی found حرکت می‌کنم و توی اون خونه می‌نویسم true. تابع Offset دو تا پارامتر می‌گیره. اولی تعداد ردیف‌ها به سمت پایین و دومی تعداد ستون‌ها به سمت راست. مثلن اگر می‌گفتم Offset(۳, ۷) یعنی سه ردیف پایین‌تر و هفت ستون جلوتر. هر دو پارامتر اختیاری هستند. مثلن من نگفته‌ام چند ردیف پایین‌تر. فقط گفته‌ام یه ستون به سمت جلو. اگر سوالی داشتید بپرسید :)

به روز رسانی:

برای جستجو و پیدا کردن تمام مقادیر در یک محدوده‌ی خاص از تابع زیر استفاده کنید:

Sub macro()

    Dim Target As Range
    Dim FoundCell As Range
    Dim LastCell As Range
    Dim FirstAddr As String

    Set Target = Range("A۱:A۱۰")

    With Target
        Set LastCell = .Cells(.Cells.Count)
    End With
    Set FoundCell = Target.Find(what:="red", after:=LastCell)

    If Not FoundCell Is Nothing Then
        FirstAddr = FoundCell.Address
        FoundCell.Offset(, ۱).Value = "true"
    End If
    Do Until FoundCell Is Nothing
        Set FoundCell = Target.FindNext(after:=FoundCell)
        If Not FoundCell Is Nothing Then
            If FoundCell.Address = FirstAddr Then
                Exit Do
            End If
            FoundCell.Offset(, ۱).Value = "true"
        End If
    Loop

End Sub

با کد زیر همیشه کلمه‌ی جستجو از خانه‌ی C۱ خونده می‌شه و جستجو در محدوده‌ای از سلول‌ها که Select شده‌اند انجام می‌شه و نیاز به تغییر کد نیست:

Sub macro()

    Dim Target As Range
    Dim FoundCell As Range
    Dim LastCell As Range
    Dim FirstAddr As String
    Dim LookupWord As String

    LookupWord = Range("C۱").Value ' change C۱ to whatever you like

    'use Selected cells instead of specific range of cells as target
    Set Target = Selection

    With Target
        Set LastCell = .Cells(.Cells.Count)
    End With
    Set FoundCell = Target.Find(what:=LookupWord, after:=LastCell)

    If Not FoundCell Is Nothing Then
        FirstAddr = FoundCell.Address
        FoundCell.Offset(, ۱).Value = "true"
    End If
    Do Until FoundCell Is Nothing
        Set FoundCell = Target.FindNext(after:=FoundCell)
        If Not FoundCell Is Nothing Then
            If FoundCell.Address = FirstAddr Then
                Exit Do
            End If
            FoundCell.Offset(, ۱).Value = "true"
        End If
    Loop

End Sub
امتحانش کردم جواب می ده اما فقط اولین نتیجه رو پیدا می کنه و بقیه رو بی خیال می شه، می خوام همه رو True کنه مثل یه تابع اگر درستش کنی ممنون می شم - Drug_exelist - ۱۰:۵۹ - ۱۳۸۹/۰۹/۲۶
میثم عزیز ، هرچند می دونم پررو بازی و خواهشم بجاست اما اگر بتونی ماکرو رو بو گونه ای تغییر بدی که رنج مورد جستجو و عبارت مورد جستجو رو از بپرسه ، کارت کاملا درسته . هرچند تو حق مطلب رو ادا کردی . اینجوری که گفتم شکل ماکرو شکیل تر و دیگه نمی خواد هی تو ماکرو دست ببرم اگر حالش نداشتی بازم از سپاسگزارم - Drug_exelist - ۱۳:۴۸ - ۱۳۸۹/۰۹/۲۶
خواهش می‌کنم این چه حرفیه این‌جا هر کس هر کاری از دست‌اش بر بیاد برای دیگران انجام می‌ده نیازی هم به جبران نیست :) در مورد این چیزی که گفتی من فقط یه راه بلدم اون هم اینه که همیشه کلمه‌ای که می‌خوای دنبالش بگردی رو توی یه خونه‌ای بنویسی و کلمه از اون‌جا خونده بشه. مثلن همیشه کلمه‌ای که می‌خواهی دنبالش بگردی رو توی A۱ بنویسی و نیاز نباشه که توی Macro دست ببری و تغییر بدی. برای انتخاب محدوده‌ی جستجو هم می‌شه Code رو طوری تغییر داد که بتونی محدوده‌ی جستجو رو با ماوس انتخاب کنی. یه کد جدید گذاشتم. موفق باشی - maysam - ۱۵:۳۶ - ۱۳۸۹/۰۹/۲۶
انصراف
۱

من یک ماکروی ساده با اکسل به صورت خودکار به‌وجود آوردم که می‌تونی این پایین ببینی. کاری که کردم این بود که یک Range از سلول‌ها رو انتخاب کردم و Crrl + F زدم و دنبال یک کلمه توی محدوده‌ای از سلول‌ها که انتخاب کرده بودم گشتم. فانکشنی که تولید شد این بود:

Sub Macro۱()
    Range("B۱:C۳").Select
    Selection.Find(What:="god", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
End Sub

این فانکشن در محدوده‌ی B۱:C۳ دنبال کلمه‌ی god می‌گرده و هر خونه‌ای که توش این کلمه باشه رو Activate می‌کنه. می‌تونی خودت به جای این پارامترها مقدار دیگه‌ای بنویسی و محدوده‌ی بیشتری رو جستجو کنی. مثلن اگر می‌خواهی از خونه‌ی A۱ تا E۸000۰ بگردی به جای B۱:C۳ باید بنوسی A۱:E۸000۰

میثم عزیز دستت درد نکن ، من زیاد با vba کار نکردم اما یه سوال ازت دارم میشه بجای Activecell یه پارامتر دیگه گذاشت که مثلا در ستون بعدی روبروی همون سلول یک کلمه ای یا عبارتی ( مثلا ok یا ture ) که نشون دهنده مثبت بودن مورد جستجو باشه گداشت. بازم از راهنمایی متشکرم - Drug_exelist - ۰۷:۵۲ - ۱۳۸۹/۰۹/۲۶
بله حتمن می‌شه! اجازه بده یک نگاهی بیاندازم و برگردم و بگم چه‌طوری می‌شه :) - maysam - ۰۹:۲۳ - ۱۳۸۹/۰۹/۲۶
انصراف
انصراف