با سلا خدمت کاربران عزیز سایت آی تی سواد
این مقاله روشی را برای شما فراهم میکند که فورا ً همان طور که در یک سلول در اکسل تایپ میکنید ، جستجو کنید و فیلتر کنید .
همانطور که در عکس زیر نشان داده شد، شما یک فهرست نام دارید که میخواهید فورا ً به همان اندازه که در یک سلول خاص تایپ میکنید ، جستجو کنید و فیلتر کنید . لطفا ً جستجو در اکسل با کدنویسی را به صورت زیر انجام دهید تا آن را وارد کنید .
جستجو در اکسل با کد نویسی
۱. اول،شما باید جدولی را با دادههای لیست ایجاد کنید، و جدول را به نام “Name” نامگذاریکنید.لطفاً تمام لیست را انتخاب کنید و گزینه Insert > Table را کلیک کنید.
۲. در پنجره باز شده Create Table روی OK کلیک کنید.
۳. روی هر سلول از جدول کلیک کنید تا زبانه Design را فعال کنید، و سپس Table Name را به نام Name تغییر دهید.
۴. روی ( Developer > Insert > Text Box (ActiveX Control) کلیک کنید تا یکجعبه متنی را در بالای فهرست جدول قرار دهید، همانطور که عکس زیر نشان داده شد:
۵. روی کادر متن کلیک کرده و روی Properties، در پنجره Properties ، سلول مرجع را درجعبه LinkedCell تایپ کنید.
۶. روی کادر متن کلیک کرده و View Code را از منوی متنی انتخاب کنید. سپس کد VBA زیر رادر پنجره Microsoft Visual Basic for Applications به جای کد اصلی جایگزین کنید.
کد VBA: جستجوی فیلتر خودکار زمانی که شما در اکسل تایپ میکنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Private Sub TextBox1_Change() 'Update by Extendoffice 2018/08/22 Dim xStr, xName As String Dim xWS As Worksheet Dim xRg As Range On Error GoTo Err01 Application.ScreenUpdating = False xName = "Name" xStr = TextBox1.Text Set xWS = ActiveSheet Set xRg = xWS.ListObjects(xName).Range If xStr <> "" Then xRg.AutoFilter field:=1, Criteria1:="*" & xStr & "*", Operator:=xlFilterValues Else xRg.AutoFilter field:=1, Operator:=xlFilterValues End If Err01: Application.ScreenUpdating = True End Sub |
نکته : در کد ، نام جعبه متن گذاشته شده TextBox1 نام دارد ،name نام فهرست جدول است . شما میتوانید آنها را براساس نیازهای خود تغییر دهید .
۷. کلیدهای Alt + Q را فشار دهید تا Microsoft Visual Basic for Applications بسته شود .
۸. با کلیک روی Developer > Design Mode.، مد طراحی را خاموش کنید .
از این به بعد ، براساس مقدار وارد شده در جعبه متن جستجو فیلتر بلافاصله انجام خواهد شد .
نکته: اگر در داده های شما عدد وجود داشته باشد از کد زیر استفاده کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Private Sub TextBox1_Change() 'Update by Extendoffice 2018/08/22 Dim xStr, xName As String Dim xWS As Worksheet Dim xRg As Range On Error GoTo Err01 Application.ScreenUpdating = False xName = "Name" xStr = TextBox1.Text Set xWS = ActiveSheet Set xRg = xWS.ListObjects(xName).Range If xStr <> "" Then If IsNumeric(xStr) Then xRg.AutoFilter field:=1, Criteria1:=xStr End If xRg.AutoFilter field:=1, Criteria1:="*" & xStr & "*", Operator:=xlFilterDynamic Else xRg.AutoFilter field:=1, Operator:=xlFilterValues End If Err01: Application.ScreenUpdating = True End Sub |
ترجمه شده از سایت www.extendoffice.com
سلام.من این کار رو انجام دادم و خوب هم بود ولی یه مشکل دارم وقتی تکست باکس رو میزارم کل ستون های اکسل تا xfd باز میشه و جابجایی رو خیلی سخت میشه چجوری میتونم جلوشو بگیرم؟
محدوده ای که نام گذاری کردین مشکل داره
من دقیقا کد رو کپی کردم،چکار باید بکنم برا اصلاح محدوده
سلام وقت بخیر . ممنون از سایت خوبتون
دققیقا منظور از این مرحله “۵. روی کادر متن کلیک کرده و روی Properties، در پنجره Properties ، سلول مرجع را درجعبه LinkedCell تایپ کنید.” چیست؟
سلول مرجع چیست و چرا شما F4 انتخاب کردین؟
سلام
سلولی هست که متن تکست باکس در آن قرار می گیرد یا بلعکس ،
برای فیلتر داده ها باید شرط فیلتر را در کادری که در سلول عنوان وارد می شود وارد کرد ، که در اینجا f4 هست
سلام در تعداد زیادی سلول اطلاعات دارم میخوام این فرمول را اجرا کنم راه حل چیست
سلام در سلول های دیگر هم اینکار رو انجام بدهید
سلام table و textbox دیگه ایجاد کنین و کد رو بر اساس اون تغییر بدین
عالی بود
سلام و خسته نباشید
دستتون درد نکنه بابت فرمول و راهنماییتون
ولی من یه مشکلی دارم
من تعداد شیتهام بالاست و مخفی هستن یه مستر لیست دارم که شیتها رو لینک کردم بهش
این کد شما فقط رو شیتی که فعال اجرا میشه
من میخوام تو کل ورک بوک کار کنه و از شیتهای مخفی شده هم استفاده کنه
سلام
منظورتون از استفاده از شیت های مخفی رو متوجه نمیشم
بیشتر توضیح میدین