كيفية إنشاء تقرير ديناميكي بين تاريخين باستخدام VBA في Excel
في عالم الأعمال والمحاسبة، تعتبر التقارير
الوسيلة الأساسية لمتابعة الأداء واتخاذ القرارات. من أكثر أنواع التقارير شيوعًا وأهمية
هي تلك التي تُظهر البيانات المحصورة بين فترتين زمنيتين؛ مثل تقرير الفواتير لشهر
معين، أو حركة مبيعات بين يوم وآخر.
بدلاً من إنشاء هذه التقارير يدويًا في
كل مرة، وهو ما قد يستغرق وقتًا وجهدًا، يمكننا اللجوء إلى لغة البرمجة المدمجة في
إكسل وهي VBA (Visual Basic for Applications)
لأتمتة هذه المهمة بالكامل. في هذا المقال، سنقوم بشرح كود برمجي بسيط وفعّال يقوم
بإنشاء تقرير احترافي بناءً على تاريخين محددين.
الفكرة العامة للمشروع
يقوم الكود الذي سنشرحه بعمل الآتي:
1.
يأخذ تاريخ البداية وتاريخ النهاية من خلايا محددة في ورقة التقرير.
2.
يبحث في ورقة مصدر البيانات (وهي في مثالنا ورقة باسم `invoice`) عن جميع السجلات التي يقع
تاريخها بين هذين التاريخين.
3.
يقوم بنسخ هذه السجلات ولصقها في ورقة التقرير (`rep_invoice`)،
مع ترتيبها أسفل بعضها البعض.
4.
يقوم بمسح أي بيانات قديمة من التقرير ليُظهر النتائج الجديدة فقط.
شرح الكود بالتفصيل
لنبدأ بكتابة الكود داخل نافذة محرر VBA (التي نفتحها بالضغط على
`Alt + F11`). سنقوم بإنشاء Sub إجراء جديد
نسميه `rep_between_tow_dates()`.
' تعريف المتغيرات
Dim wsSource As
Worksheet, wsReport As Worksheet
Dim lastRow As Long, i As Long, reportRow
As Long
Dim startDate As Date, endDate As Date
' إيقاف تحديث الشاشة لتسريع الأداء ومنع وميض الشاشة
Application.ScreenUpdating = False
' 1 - تحديد أوراق العمل المصدر والهدف
Set wsSource =
ThisWorkbook.Sheets("invoice")
' ورقة البيانات الأساسية
Set wsReport =
ThisWorkbook.Sheets("rep_invoice")
' ورقة عرض التقرير
' 2 - تنظيف التقرير القديم
' مسح أي بيانات موجودة مسبقًا في نطاق التقرير (من الصف 7
إلى G100000)
wsReport.Range("A7:G100000").ClearContents
' 3 - قراءة التواريخ من ورقة التقرير
With
Sheets("rep_invoice")
.Select
startDate =
.Range("C4").Value ' قراءة تاريخ البداية من الخلية C4
endDate = .Range("E4").Value ' قراءة تاريخ النهاية من الخلية E4
End With
' 4 - تحديد الصف الأخير الذي يحتوي على بيانات في ورقة المصدر
' نبحث في العمود B (الذي يحتوي على التواريخ) عن آخر خلية فيها بيانات
lastRow =
wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row
' 5 - تحديد الصف الذي سنبدأ بالكتابة منه في التقرير
reportRow = 7 ' نبدأ من الصف 7، حيث أن الصفوف السابقة قد تحتوي على عناوين
التقرير
' 6 - الحلقة الرئيسية: المرور على جميع صفوف ورقة المصدر
For i = 3 To lastRow '
نبدأ من الصف 3 غالباً لترك
مساحة للعناوين في ورقة المصدر
' 7 - شرط التصفية: التحقق مما إذا كان التاريخ يقع بين الفترتين
المحددتين
If
wsSource.Cells(i, "B").Value >= startDate And _
wsSource.Cells(i,
"B").Value <= endDate Then
' 8 - نسخ البيانات: إذا تحقق الشرط، نقوم بنقل البيانات صفاً بصفاً
wsReport.Cells(reportRow, 1).Value = wsSource.Cells(i,
"A").Value
' نقوم بتنسيق التاريخ في العمود الثاني ليظهر بالصيغة السنة/الشهر/اليوم
wsReport.Cells(reportRow, 2).Value = Format(wsSource.Cells(i,
"B").Value, "yyyy/mm/dd")
wsReport.Cells(reportRow, 3).Value
= wsSource.Cells(i, "C").Value
wsReport.Cells(reportRow, 4).Value
= wsSource.Cells(i, "D").Value
wsReport.Cells(reportRow, 5).Value
= wsSource.Cells(i, "E").Value
wsReport.Cells(reportRow, 6).Value
= wsSource.Cells(i, "F").Value
wsReport.Cells(reportRow, 7).Value
= wsSource.Cells(i, "G").Value
' الانتقال إلى الصف التالي في التقرير لاستقبال البيانات الجديدة
reportRow =
reportRow + 1
End If
Next i
' 9 - إنهاء الإجراء وإعلام المستخدم
MsgBox "تم إنشاء التقرير بنجاح!", vbInformation
Application.ScreenUpdating = True
End Sub
نقاط القوة في هذا
الكود
1.
الديناميكية: الكود لا يتعامل مع نطاقات ثابتة. فهو يبحث عن آخر صف في البيانات
(`lastRow`) ويتعامل مع أي عدد من السجلات.
2.
المرونة: يمكنك بسهولة تغيير أسماء الأوراق (`invoice`,
`rep_invoice`) أو الخلايا التي تحتوي
على التواريخ (`C4`, `E4`)
لتناسب تصميم ملفك.
3.
الكفاءة: استخدام `Application.ScreenUpdating =
False` يجعل الكود يعمل بشكل أسرع،
خاصة إذا كانت هناك آلاف السجلات.
4.
الوضوح: الكود مقسم إلى أجزاء واضحة، مما يجعله سهل القراءة والتعديل لمن لديه
معرفة بسيطة بالبرمجة.
كيفية استخدام الكود في ملفك الخاص
1.
تجهيز ورقتي العمل:
- تأكد من وجود ورقة باسم invoice`
تحتوي على البيانات. يجب أن يكون العمود `B`
في هذه الورقة هو العمود الخاص بالتواريخ.
- تأكد من وجود ورقة باسم rep_invoice`
والتي ستحتوي على التقرير. ضع في الخلية `C4`
تاريخ البداية، وفي الخلية `E4`
تاريخ النهاية. يجب أن يحتوى الصف السابع في هذه الورقة على عناوين الأعمدة (مثل: الرقم،
التاريخ، العميل، المبلغ...إلخ).
2.
إدراج الكود:
- افتح محرر VBA بالضغط على `Alt + F11`.
- من القائمة `Insert`،
اختر `Module`.
- الصق الكود في النافذة الفارغة على اليمين.
3.
تشغيل الكود:
- يمكنك تشغيل الكود بالضغط على `F5`
ومؤشر الكتابة داخل الكود، أو يمكنك رسم زر (Form Control
Button) على ورقة التقرير وتحديد
الماكرو `rep_between_tow_dates`
ليعمل بنقرة زر واحدة.
يُعد هذا الكود مثالاً ممتازًا على قوة
وفائدة برمجة VBA في أتمتة
المهام المتكررة وتحويل إكسل من مجرد أداة جداول بيانات إلى منصة تقارير تفاعلية. باستخدام
هذا الكود، يمكنك توفير الوقت، تقليل الأخطاء البشرية، والحصول على تقرير دقيق خلال
لحظات. جرب تعديل الكود ليناسب احتياجاتك الخاصة، وأضف إليه المزيد من المميزات مثل
إضافة صف للإجماليات أو تنسيق التقرير تلقائيًا بعد إنشائه.
قد يعجبك ايضا
- تحميل برنامج حركة الخزينة مجانا
- اسطوانة التعريفات الشاملة DriverPack Solution بدون نت
- شيت بجميع اكواد الخدمة في فورى Fawry اكواد فوري
- برنامج مجانى لمتابعة حركة الخزينة Excel
- تحميل برنامج مخازن مجانى 100 % كامل ومفتوح المصدر | Store Management System
- برنامج متابعة الشيكات (شيكات دفع / شيكات قبض ) Cheques Management + نسخة تجريبية
- تحميل برنامج الكاشير2020 المجانى لادارة حسابات المحلات التجارية Cashier
- تحميل برنامج مجانى حضور وانصراف الموظفين بالبصمة( دوام الموظفين المجانى)
- تحميل برنامج مخازن مجانى 100%
- -برنامج المنجز 2024
- تحميل برنامج محاسبى كامل كفعل مدى الحياة
تحميل مجانى 100% برنامج إدارة العقود والوثائق الرسمية: التسهيل والتنظيم في إدارة المؤسسات
تحميل افضل برنامج مخازن ومحاسبة مجانى اكسس Access Template Free
تحميل مجانى شيت اكسل المخازن ( وارد – منصرف – مرتجعات – اهلاك – تقارير)
تحميل ملف اكسل بسيط لادارة المخازن الصادر والوارد والارصدة الفعلية
تحميل مجانى برنامج شامل لإدارة الإيرادات والمصروفات والمشتريات Excel اخر تحديث
تحميل مجانى برنامج الكنترول المدرسى ( كنوز ) وادارة اعمال الامتحانات وزارة التربية والتعليم
تحميل مجانى : افضل برنامج ادارة شئون العاملين( HR ) لعام 2025 Human Resource
تحميل برنامج الفاتورة المجاني على الإكسل: الفاتورة الالكترونية
تنزيل مجانا | تحميل برنامج إدارة إجازات الموظفين: الحل الشامل لإدارة إجازات الموظفين باحترافية
تحميل مجاني: برنامج "احسب عمرك" بالإكسل - حساب العمر مفتوح المصدر