در کد نویسی vba برای اکسل به معرفی Range و قابلیت هایی که در آن داریم می پردازیم، متد ها و سایر خاصیت های آن را نیز توضیح میدهیم.

قبلا با کد زیر آشنا بودیم:

 Range("B3").Value = 2

 

 

با این کد با رنج مورد نظر مقدار می دادیم و نتیجه به صورت زیر بود:

حا کد زیر را انتخاب کنید، متد Range که از کتد های شی woorkseet هست در ورودی خود یک رنج به صورت متن(رشته) از ما میگیرد و آن رنج را پیدا میکند، حال ما با علامت . و سپس نوشتن value می خواهیم فیلد value آن رنج پیدا شده را پر کنیم

اکنون در این مثال رنج ما شامل چندین خانه می باشد:

Range("A1:A4").Value = 5

 

 

یا به صورت دیگر با دادن چندین رنج به متد :

Range("A1:A2,B3:C4").Value = 10


اگ مطابق دروس قبلی به یک خانه نامی اختصاص داده باشید، می توانید برای یافتن آن رنج از نام نیز استفاده کنید:

Range("Prices").Value = 15

سلول ها

در کنار متد Range شما از Cells هم میتوانید استفاده کنید، این متد در خروجی به شما رنج میدهد اما تفاوتی دارد که در ورودی لازم نیست ساختار متنی داشته باشید و مثلا “A1” را به صورت ۱و۱ نشان می دهید، و فقط به اعداد سر و کار دارید!

اما این چه فایده ای دارد؟ در زمانی که از حلقه ها خواستید استفاده کنید خواهید فهمید که کار با Cells چقدر راحت تر است…

Cells(3, 2).Value = 2

 

اگر بخواهید رنجی شامل چند خانه اختیار کنید:

Range(Cells(1, 1), Cells(4, 1)).Value = 5

 

خروجی Cells(1, 1) همان A1 است و خروجی Cells(4, 1) نیز A4 است، پس انگار نوشته اید Range(A1, A4)

نتیجه:

 

شما لازم نیست کد ها را در هم درهم بنویسید! همانطور که ابتدای این درس گفتم خروجی worksheet.Range(“A1:C4”) یک رنج است و شما .Value را برای آن رانج دارید پر میکنید. عبارت worksheet را هم چون معلوم است درون کدام ورکشیت در حال کد نویسی هستید نمیخواهد بنویسید.

حال میتوانید این کار ها را جدا جدا بنویسید:

Dim example As Range

ابتدا یک متغیر با نام example ساختیم، این متغیر به سبکی ساخته شد که فقط میتواند برای Range ها بکار رود! یعنی درون example نمیتوانید عدد یا متن یا وروکشیت و ورکبوک بریزیم! فقط میتوانیم رنج یا زیر مجموعه های رنج را بریزیم.

 

Set example = Range("A1:C4")

با عبارت Set خروجی متد Range که یک رنج بود را درون example میریزیم(البته عبارت درون ریختن صحیح نیست و در واقع ما به آن رنج یک اشاره گر وصل می کنیم)

 

example.Value = 8

حال example در هر جا به کار برده شود ، منظور همان رنج “A1:C4” است! و به رنج “A1:C4” در حال اشاره کردن است!!

 

خروجی کار:

 

تا اینجا برای رنج ها فقط با value آشنا شدیم! حال به متد ها و فیلد های دیگر آن نیز آشنا می شویم

 

انتخاب یک رنج با VBA

شما می توانید با متد Select به راحتی رنج خود را انتخاب نمایید.

Dim example As Range
Set example = Range("A1:C4")

example.Select

 

 

 

اگر درون یک شیت مثل sheet1 در حال کد نویسی هستید، و بخواهید اتفاق هایی را برای مثال رنج های sheet3 رقم بزنید، باید به سبک زیر اقدام کنید:

Worksheets(3).Activate
Worksheets(3).Range("B7").Select

ابتدا آن شیت را فعال میکنیم! سپس رنج را انتخاب کرده و مقدار آن را تغییر میدهیم

 

 

کار با ردیف ها در VBA اکسل

رنج ها متدی با نام Rows دارند که میتوانید ردیف های آن رانج را در اختیار بگیرید و روی آن ها عملیات دلخواه را پیدا کنید:

Dim example As Range
Set example = Range("A1:C4")

example.Rows(3).Select

 

 

برای کار با ستون های هم میتوانید از متد Columns استفاده نمایید:

Dim example As Range
Set example = Range("A1:C4")

example.Columns(2).Select

 

 

کپی و پیست در VBA اکسل

به راحتی با متد های copy و past می توانید این عملیات ها را برای رنج ها انجام دهید.

متد Paste برای شی های ورکشیت است ، با متد ActiveSheet شیت فعال را پیدا می کنیم و روی آن متد Paste را اجرا می کنیم.

Range("A1:A2").Select
Selection.Copy

Range("C3").Select
ActiveSheet.Paste

 

البته راه دیگر هم برای کپر کردن وجود داشت:

Range("C3:C4").Value = Range("A1:A2").Value

 

 

پاک کردن مقادیر رنج در VBA

برای این جار هم میتوانید از متد ClearContents استفاده کنید و هم میتوانید فیلد Value آن رنج دلخواه را با متن خالی پر کنید:

Range("A1").ClearContents

//یا

Range("A1").Value = ""

 

 

تعداد خانه ها

 

متد Count تعداد خانه های یک رنج را به ما میدهد

Dim example As Range
Set example = Range("A1:C4")

MsgBox example.Count

مسلما تعداد خانه های رنج example عدد ۱۲ خواهد بود.

 

مثال دیگر:

Dim example As Range
Set example = Range("A1:C4")

MsgBox example.Rows.Count

خروجی:

با این روش می توانید تعداد ردیف ها را هم بدست آوریم ، در همین درس گفتید که برای گرفتن ردیفی از یک رنج به صورت example.Rows(30).Select عمل میکنیم اما اگر بخواهیم بدانیم این رنج اصلا ردیف ۳۰ دارید یا نه به وسیله example.Rows.Count می توانیم آن را چک کنیم.

 

 

 

درباره نویسنده

سید حامد موسوی

مهندس برق - مخابرات و در زمینه های طراحی مدارت الکترونیکی ، مخابراتی، برنامه نویسی چند رسانه ای ، طراحی وب ، اندروید ، نریشن و گرافیک فعالیت دارم.

متن نظر