You are currently viewing تکرار روی سلول ها | چگونه در اکسل سلول های حاوی اطلاعات را شمارش کنم؟

تکرار روی سلول ها | چگونه در اکسل سلول های حاوی اطلاعات را شمارش کنم؟

برای تکرار یک کد یا عملیات روی سلول های اکسل توسط VBA باید از حلقه ها استفاده نمایید. VBA مانند سایر زبان های برنامه نویسی روش های مختلفی برای ایجاد تکرار را پشتیبانی می نماید. در این آموزش ما از حلقه Do…Loop برای ایجاد تکرار استفاده نموده ایم.

قبل از مطالعه این آموزش بخوانید:
چگونه در اکسل ماکرو ایجاد، ذخیره و اجرا نمایم؟

تکرار روی سلول ها برای اهداف مختلفی انجام می شود که می توان به تغییر اطلاعات درون سلول ها، تغییر قالب بندی سلول ها، شمارش سلول های با شرایط خاص و … اشاره نمود.

اساس کار برای نیل به هر یک از این اهداف بالا تقریبا یکی می باشد و می توان با اندکی تغییر در کد به هدف دیگری دست یافت.

در این آموزش ما به منظور شمارش سلول هایی که در یک ستون خاص اطلاعاتی درون آنها وارد شده است از VBA استفاده نموده ایم.

در این آموزش قرار است با کمک VBA و ایجاد تکرار روی سلول ها تعداد سلول های ستون A صفحه Sheet1 که اطلاعات دارند را شمارش و نتیجه را به کاربر نمایش دهیم.

کد VBA

کد زیر با تکرار روی سلول ها، سلول های حاوی اطلاعات را شمارش می نماید.


Option Explicit 'n اعلان متغيرها اجباري مي باشد

Sub countACol() 'اعلان روال

' اعلان متغيرهاي موردنياز
Dim sw As Boolean
Dim i As Integer
Dim r As Range
Dim rowCount As Integer
 
	sw = False 'متغير بولين براي شمارش تعداد رديف هاي صفحه حاوي اطلاعات
	rowCount = 0 'متغير عددي براي نگهداري تعداد رديف ها
	i = 1 'متغير عددي براي شمارش تعداد رديف ها

	Do Until sw = True 'شروع حلقه و ادامه آن تا وقتي که متغير بولين مقدار صحيح داشته باشد
		Set r = Me.Range("A" & i) 'تعيين ستون اول بعنوان سلول موردنظر براي بررسي
		If IsEmpty(r.Value) Then 'بررسي مقدار سلول از نظر اينکه آيا سلول خالي است يا مقدار دارد
			sw = True 'اگر مقدار سلول خالي شود شاخص خروج از حلقه مثبت مي شود و حلقه پايان مي يابد
		Else 
			rowCount = rowCount + 1 'در صورتي که مقدار سلول خالي نباشد شمارش ادامه مي يابد
			i = i + 1 'اگر سلول خالي نباشد سلول بعدي بايد بررسي شود
		End If
	Loop
	' نمایش پیغام به کاربر
	MsgBox "تعداد " & rowCount & " سلول در ستون A صفحه " & Me.Name & " یافت گردید.", vbMsgBoxRtlReading + vbInformation

End Sub 'پايان روال

تحلیل سطر به سطر کد:

سطر ۱

استفاده از دستور Option Explicit به این معناست که اعلان متغیرها در این روال اجباری است و در صورتی که متغیری اعلان نشود خطای کامپایلر ایجاد گردد.

اطلاعات بیشتر در مورد دستور Option Explicit را در این صفحه مشاهده نمایید.

سطر ۳

اعلان روال countACol() از نوع روال Sub را اعلام می نماید.

اطلاعات بیشتر در مورد روال ها را در این صفحه مشاهده نمایید.

سطرهای ۶ تا ۹

متغیرهای موردنیاز در این سطرها اعلان شده اند.

برای تکرار روی سلول ها به چهار متغیر sw از نوع Boolean، متغیر i از نوع Integer، متغیر r از نوع Range، متغیر rowCount از نوع Integer نیاز خواهیم داشت که در ادامه کارکرد هر کدام مشخص خواهد گردید.

سطر ۱۱

مقداردهی اولیه متغیر بولین sw می باشد. از این متغیر برای کنترل حلقه Do استفاده می نماییم.

سطر ۱۲

مقداردهی اولیه متغیر rowCount می باشد. این متغیر برای نگهداری تعداد سطرهایی که حاوی اطلاعات هستند بکار رفته است.

سطر ۱۳

مقدار اولیه متغیر i در این سطر برابر 1 تعیین شده است. این متغیر تعیین کننده اولین سلولی است که باید از آنجا شمارش آغاز شود. یک به این معناست که اولین سطر صفحه اکسل مبنای شروع شمارش قرار خواهد گرفت.

سطر ۱۵

شروع حلقه Do را اعلام کرده است. در این خط کلمه کلیدی Until که بخشی از بدنه حلقه Do می باشد به این معناست که حلقه تا زمانی که مقدار متغیر بولین sw = True گردد دستورات داخل بدنه حلقه Do یعنی خطوط ۱۶ تا ۲۲ تکرار گردد. تکرار روی سلول ها از این سطر آغاز می شود.

سطر ۱۶

در این سطر به کامپایلر VBA اعلام شده است که مرجع متغیر r سلول "A" & i می باشد. در اینجا دلیل استفاده از متغیر i مشخص می شود. با توجه به سطر ۶ اولین سلولی که باید بررسی شود A1 خواهد بود.

نکته ای که در مورد این سطر احتمالا با آن مواجه شده باشید استفاده از کلمه کلیدی Me می باشد.

پنجره Project فایل پیوست این پست شبیه تصویر زیر خواهد بود:

کد آموزش تکرار روی سلول ها در پوشه Microsoft Excel Objects در شیء Sheet1 (sheet1) ذخیره شده است
کد این آموزش در پوشه Microsoft Excel Objects در شیء Sheet1 (sheet1) ذخیره شده است.

کلمه کلیدی Me در VBA همواره اشاره به ماژولی دارد که کد درون آن نوشته شده است. در این آموزش نیز با توجه به اینکه کد در شیء اکسل Sheet1 (sheet1) نوشته شده است و این شیء از نظر کامپایلر VBA به نوعی ماژول محسوب می شود کلمه کلیدی Me به sheet1 اشاره خواهد داشت.

سطر ۱۷

در این سطر از دستور If و ترکیب آن با تابع داخلی IsEmpty برای بررسی مقدار سلول r استفاده شده است. مقدار بازگشتی تابع داخلی IsEmpty یک متغیر بولی می باشد و در این سطر این تابع مقدار سلول r.Value را بررسی می نماید. با توجه به توضیحات کد If IsEmpty(r.Value) Then به VBA اعلام می نماید که اگر مقدار سلولی که در کد سطر ۱۶ تعیین نموده ایم اگر خالی باشد کد سطر ۱۸ اجرا شود و گرنه سطر ۱۹ اجرا گردد.

سطر ۱۸

در صورتی که مقدار سلول خالی باشد مقدار متغیر sw = True تعیین می شود و حلقه Do پایان می یابد.

سطر ۱۹

بخشی از بدنه دستور If می باشد و بدین معناست که اگر عکس شرط اصلی برقرار باشد خطوط بین Else و End If باید اجرا گردند.

سطر ۲۰

در صورتی که مقدار سلولی که بررسی می شود خالی نباشد شمارش با استفاده از کد rowCount = rowCount + 1 آغاز می شود.

سطر ۲۱

در این سطر کد مقدار متغیر i یک واحد افزایش می یابد تا حلقه Do در سلول بعدی ادامه یابد.

سطر ۲۲

پایان دستور If را اعلام می نماید.

سطر ۲۳

پایان حلقه Do را اعلام می نماید. تکرار روی سلول ها در این سطر خاتمه می یابد.

سطر ۲۵

بعد از پایان حلقه Do نتیجه را به کاربر نمایش می دهد.

سطر ۲۷

پایان روال countACol() را اعلام می نماید.

دانلود فایل آموزشی

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