فهرست مطالب
در حین کار با کدهای Excel VBA، با چند توابع داخلی مواجه می شویم که یک کار پیچیده را به یک کد کوچک یک خطی تبدیل می کند. InStr چنین تابعی در Excel VBA است که یک رشته خاص را در یک رشته معین دیگر که از یک موقعیت مشخص شروع می شود جستجو می کند. امروز نشان خواهم داد که چگونه می توانید از تابع InStr در VBA برای جستجوی یک رشته خاص در یک رشته معین دیگر استفاده کنید.
دانلود کتاب تمرین
InStr Function.xlsm
معرفی VBA InStr Function
- خلاصه
یک رشته خاص را در یک رشته معین جستجو می کند، از یک موقعیت مشخص شروع می شود. اگر مطابقت پیدا کرد، موقعیت را در رشته داده شده از جایی که مسابقه شروع شد، برمیگرداند.
- Syntax
InStr([شروع ],string1,string2,[مقایسه])
- آرگومانها استدلال نیاز توضیح
- اگر یکی یا هر دو آرگومان [start] و آرگومان [مقایسه] Null<2 باشد>، با یک خطا مواجه خواهید شد.
- چهار مقدار مشخص شده در آرگومان [مقایسه] چهار نوع مختلف مقایسه را انجام می دهند. آنها در زیر ذکر شده اند:
VALUE | CONSTANT | DESCRIPTION
|
---|---|---|
-1 | vbUseCompareOption | مقایسه مشخص شده در عبارت Option Compare. |
0 | vbBinaryCompare | یک مقایسه باینری را انجام می دهد. |
1 | vbTextCompare | مقایسه متن را انجام می دهد. |
2 | vbDatabaseCompare | مقایسه ای را بر اساس پایگاه داده شما انجام می دهد. عبارت |
- Option Compare عبارتی است که قبل از شروع کد اصلی VBA ارائه می شود. مشخص میکند که آیا کد در صورت لزوم برای مقایسه باینری یا مقایسه متن جستجو خواهد کرد. به عبارت ساده ، مقایسه باینری به معنای حساس به حروف بزرگ و کوچک استمقایسه.
- به عبارت ساده ، مقایسه متن به معنای مقایسه غیر حساس به حروف بزرگ و کوچک است.
- موقعیت string1 را که string2 از آنجا شروع شده است، برمیگرداند.
- در صورتی که string2 پیدا نشود در string1 که از موقعیت start شروع می شود، 0 را برمی گرداند.
- اگر string1 دارای طول صفر باشد، 0 را برمی گرداند.
- اگر string2 دارای طول صفر باشد، آرگومان start را برمی گرداند.
- و در نهایت، اگر هر یک از string1 یا string2 Null است، یک خطا برمی گرداند.
3 مثال آسان برای استفاده از تابع VBA InStr
در در این بخش، سه مثال ساده از اعمال تابع VBA InStr در اکسل را مشاهده خواهیم کرد. بیایید اولین مثال تابع InStr را در کدهای VBA ببینیم.
1. تصمیم گیری در مورد اینکه آیا یک آدرس یک آدرس ایمیل است یا نه با استفاده از تابع VBA InStr
در اینجا، ما مجموعه ای از داده ها را شامل برخی از آدرس های تماس مشتریان گرفته ایم. هدف ما در اینجا تشخیص این است که آیا آدرس ها آدرس ایمیل هستند یا خیر.
اکنون یک کد VBA با استفاده از تابع InStr برای شناسایی ایجاد می کنیم. آیا این یک آدرس ایمیل است یا نه. برای انجام این کار، مراحل زیر را دنبال کنید.
مراحل:
- در ابتدا، به برگه Developer بروید و <را انتخاب کنید 1>Visual Basic (یا Alt+F11) را فشار دهید تا VBA باز شودپنجره.
- سپس، در پنجره VBA ، به Insert > Module .
- بعد از آن، روی ماژول، کد زیر را قرار دهید:
9476
- علاوه بر این، ما تابعی به نام DECISION ایجاد کرده ایم. این تصمیم می گیرد که آیا یک آدرس یک آدرس ایمیل است یا نه. بیایید تابع را به مجموعه دادهای که داریم اعمال کنیم.
- در سلول C5 ، فرمول زیر را بنویسید و سپس با استفاده از Fill Handle بقیه سلولها را بهطور خودکار پر کنید.
=DECISION(B5)
- همانطور که می بینیم، ما هر آدرس را شناسایی کرده ایم که آیا آدرس ایمیل باشد. یا نه.
🎓 کد چگونه کار می کند؟
- Function DECISION(string1 As String)
ابتدا تابعی به نام DECISION با یک آرگومان رشته ای با نام string1 .
- موقعیت کم نور به عنوان عدد صحیح
یک متغیر عدد صحیح به نام موقعیت<را اعلام می کند. 2>.
- Position = InStr(1, string1, "@", 0)
این مقدار را اختصاص می دهد متغیر را به عنوان خروجی تابع InStr با آرگومانهای 1، string1، "@" و 0 قرار دهید. به طور خلاصه، این موقعیت را در آدرسی که در آن یک “@” وجود دارد، اختصاص میدهد.
- اگر موقعیت = 0 سپس DECISION = “نه ایمیل”
خروجی تابع DECISION را به عنوان "نه ایمیل" اختصاص می دهد، اگر موقعیت متغیر 0 است، یعنی هیچ “@” در آدرس وجود ندارد.
(به یاد بیاورید اگر رشته ای در رشته داده شده یافت نشد، InStr تابع 0 را برمیگرداند.
- Else DECISION = "Email"
این خروجی تابع DECISION به عنوان "ایمیل" در صورتی که یک "@" در آدرس وجود داشته باشد. بنابراین آدرس هایی که در آنها "@" وجود دارد به عنوان ایمیل و بقیه به عنوان "نه ایمیل" دسته بندی می شوند.
خواندنهای مشابه
- نحوه استفاده از تابع VBA UCASE در اکسل (4 مثال)
- استفاده از تابع MsgBox در Excel VBA (یک راهنمای کامل)
- نحوه استفاده از تابع VBA SPLIT در اکسل (5 مثال)
- استفاده از تابع LCase در VBA در اکسل (با 4 مثال)
- نحوه استفاده از Fix Function در Excel VBA (4 مثال)
2. استفاده از تابع VBA InStr برای استخراج برنامه افزودنی برخی از آدرسهای ایمیل
در اینجا، ما فهرستی از برخی از آدرسهای ایمیل برخی از مشتریان را داریم. این بار پسوند آدرس ایمیل را استخراج می کنیم، مانند اینکه آیا آنها gmail.com یا yahoo.com دارند.
برای انجام این کار، مراحل زیر را دنبال کنید.
مراحل:
- برای شروع، مانند روش قبلی، یک VBA<2 جدید باز کنید> ماژول و کد زیر را در پنجره قرار دهید.
8861
- علاوه بر این، ما یک تابع به نام ایجاد کرده ایم. گسترش . پسوند هر آدرس ایمیل را استخراج می کند.
- علاوه بر این، اجازه دهید این تابع را در مجموعه داده ای که داریم اعمال کنیم. ابتدا این فرمول را در سلول C5 وارد کنید و سپس بر روی Fill Handle دوبار کلیک کنید.
=EXTENSION(B5)
- در آخر، میتوانیم ببینیم که با موفقیت برنامه افزودنی همه ایمیلها را استخراج کردهایم.
🎓 کد چگونه کار می کند؟
- Function EXTENSION(Email As String)
این یک تابع جدید به نام EXTENSION با آرگومان رشته ای با نام ایمیل .
- موقعیت کم نور به عنوان عدد صحیح
این قسمت یک متغیر عدد صحیح به نام موقعیت را اعلام می کند .
- Position = InStr(1, Email, "@", 0)
این مقدار <1 را اختصاص می دهد متغیر>موقعیت به عنوان خروجی تابع InStr با آرگومانهای 1، ایمیل، "@" و 0 . به طور خلاصه، این موقعیت را در Email اختصاص می دهد که در آن “@” وجود دارد.
- EXTENSION = Right(Email, (Len (ایمیل) – موقعیت))
این قسمت خروجی تابع EXTENSION را به عنوان کاراکترهای بعد از نماد “@” اختصاص میدهد. این پسوند مورد نیاز ایمیل است.
3. استخراج نام یا نام خانوادگی از یک نام با استفاده از تابع VBA InStr
در نهایت، ما یک کار منحصر به فرد متفاوت را انجام خواهیم داد. این بار اسامی تعدادی از کارمندان را داریمیک شرکت. و ما سعی خواهیم کرد تابعی بسازیم تا نام یا نام خانوادگی کارمندان را استخراج کنیم.
برای انجام این کار، مراحل زیر را دنبال کنید.
0> مراحل:
- ابتدا، مشابه روش 1 ، کد زیر را در یک ماژول جدید در پنجره VBA قرار دهید.
3589
- در اینجا، ما یک تابع به نام SHORTNAME ایجاد کرده ایم که نام یا نام خانوادگی را از یک نام استخراج می کند. بیایید این فرمول را در مجموعه داده خود اعمال کنیم.
- در ابتدا، برای استخراج نام، فرمول زیر را در سلول C5 یادداشت کنید.
=SHORTNAME(B5,-1)
- در آخر برای استخراج نام خانوادگی، فرمول زیر را در D5 می نویسیم:
=SHORTNAME(B5,1)
- بعد از آن، اگر بقیه سلول ها را با Fill Handler<2 به صورت خودکار پر کنیم>، نتیجه دلخواه خود را خواهیم دید.
🎓 کد چگونه کار می کند؟
- تابع SHORTNAME(نام به عنوان رشته، First_یا_آخر به عنوان عدد صحیح)
یک تابع جدید به نام SHORTNAME<2 ایجاد می کند> با یک آرگومان رشته ای به نام Name و یک آرگومان عدد صحیح به نام First_or_Last .
- Dim Break As Integer
این قسمت یک متغیر عدد صحیح جدید به نام Break را اعلام می کند.
- Break = InStr(1, Name, ” “, 0)
مقدار متغیر Break را به عنوان خروجی تابع InStr با آرگومانها اختصاص میدهد. 1، نام، " " و 0 . به طور خلاصه، این موقعیت را در Name اختصاص می دهد که در آن یک فاصله (“ ”) وجود دارد.
- If First_or_Last = -1 سپس SHORTNAME = Left(Name, Break – 1)
این خط خروجی تابع SHORTNAME را به عنوان کاراکترهای قبل از فاصله اختصاص می دهد. اگر آرگومان First_or_Last -1 باشد. این اولین نام است.
- SHORTNAME = Right(Name, Len(Name) – Break)
این قسمت خروجی اگر آرگومان First_or_Last 1 باشد، SHORTNAME به عنوان کاراکترهای بعد از فاصله عمل میکند. این نام خانوادگی است.
نتیجه گیری
به این ترتیب، می توانید کدهای VBA را با تابع InStr بنویسید که موقعیت یک رشته خاص را در یک رشته دیگر مشخص می کند. رشته، و سپس می توانید توابع خود را برای کاربردهای مختلف ایجاد کنید. علاوه بر این، اگر سوالی دارید، از ما بپرسید.