برای تکرار یک کد یا عملیات روی سلول های اکسل توسط 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
به این معناست که اعلان متغیرها در این روال اجباری است و در صورتی که متغیری اعلان نشود خطای کامپایلر ایجاد گردد.
سطر ۳
اعلان روال 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 فایل پیوست این پست شبیه تصویر زیر خواهد بود:
کلمه کلیدی 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()
را اعلام می نماید.
دانلود فایل آموزشی
بیشتر بخوانید
مسیر فایل در اکسل | نمایش اطلاعات پوشه و نام فایل فعلی در سلول اکسل
مشکل network unreachable در اوبونتو
ویرایشگر VBA | چگونه ویرایشگر کد ویژوال بیسیک را باز نمایم؟
اتصال VBA به MYSQL | انتقال داده ها از MYSQL به اکسس و اکسل
Developer tab در اکسل | چگونه سربرگ توسعه دهنده را در اکسل فعال نمایم؟
افزودن متغیر به رشته | چگونه متغیر را به یک رشته ثابت اضافه نمایم؟