قوائم الفصول

قوائم الفصول



انشاء قوائم الفصول

كثيرا من رواد العمل بالكنترول المدرسي يبحثون عن طرق لإنشاء قوائم الفصول بطريقة بسيطة تيسر عليهم عبء ضخم فى إنشاء قائمة بأسماء الطلاب لكل فصل

نظرا لعدد الطلاب وعدد الفصول وطباعة تلك القوائم

طبعا لكل مدرسة قاعدة بيانات مجمعة بأسماء جميع الطلاب ومراحلهم التعليمية وأيضا مسجل بها أسماء الفصول

ما سنتحدث عنه هى طريقة مرنة بسيطة بحيث تتماشى مع أعداد الطلاب بأى مدرسة

من خلال كود فيجوال بيسك مرن وسنقوم بتوضيح كيف يتم استخدامه بالطريقة الصحيحة

الكود كاملا كالتالي

نلاحظ أنه تم شرح اسطر الكود كاملا هنا باللغة العربية

يوضع الكود داخل موديول مع ربطه بزر داخل الصفحة المخصصة لذلك


'فضلا عند استخدامك للشفرات البرمجية يجب ذكر المصدر
'https://elshriefacademy.blogspot.com

Sub MZM_START()
' الإعلان عن خمسة متغيرات

Dim MyRange As Range
Dim R As Integer, C As Integer, M As Integer, Y As Integer, t As Integer

'تخصيص نطاق البيانات بشيت الطلاب الذى سيتم جلب البيانات منه وهو
'='بيانات الطلبه'!$A$10:$AK$1009
'وتم تسميته بإسم school

Set MyRange = Range("School")
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

'=================================
' مسح بيانات الفصول
'استدعاء كود مسح البيانات بشيت قوائم الفصول
'وذلك لإستقبال البيانات الجديدة وهذا النطاق تم تحديده داخل الكود وهو
'("B11:L60")

MZM_ClearContents

'=================================
' يتم فرز النطاق المسمى School
'استدعاء كود الفرز للبيانات بشيت بيانات الطلاب

MZM_Sort

'=================================
'تم وضع شرط إضافة نصف عدد الفصل بالخلية 
'E2
'وفي حال عدم وجود بيانات بتلك الخلية يتم التنفيذ بناء على شرط افتراضي
'الشرط الافتراضي أن نصف عدد طلاب الفصل يساوى 50 طالب
'نلاحظ أنه فى حالة عدم ادخال القيمة بهذه الخلية سيتم جلب البيانات داخل قائمة واحدة
'ولن يتم قسمة عدد إجمالى طلاب الفصل على قائمتين

If IsEmpty(Range("E2")) Or IsNumeric(Range("E2")) = False Then t = 50 Else t = Range("E2").Value

'تحديد صف رؤوس الجدول بالصف العاشر

C = 10
With MyRange

'بداية حلقة تكرارية لجلب البيانات المطلوبة مع وضع شروط لها كالتالي

    For R = 1 To .Rows.Count
        If .Cells(R, 2) <> "" Then
        
           ' اضافة شرط ان العمود الرابع بشيت بيانات الطلبة يتوافق مع رقم الفصل المطلوب بالخلية
           'L2
           'الموجود بها قائمة الفصول بشيت قوائم الفصول
           

            If .Cells(R, 4).Text = Range("L2").Text Then
            
                'وضع شرط فى حال توافر بيانات بالخلية
                'J2
                'القائمة المنسدلة الخاصة بالنوع ذكر أو أنثي يعمل الكود على أساسها
                'فى حال عدم توافر بيانات بها يستمر الكود فى وظيفته 
                'شرط أن تتوافق الخلية مع العمود رقم 18 بالشيت الرئيسي
                
                If Range("J2").Text = "" Then GoTo 1
                If .Cells(R, 18).Text = Range("J2").Text Then
1               If M >= t Then Y = 6: M = 0
                    M = M + 1
                    
                   'تم اضافة شرط خاص بتنسيق الجدول حسب تواجد رؤوس الأعمدة بشيت قوائم الفصول
                   'Y = 6
                   'أى أن عدد أعمدة كل قائمة من القائمتين بشيت قوائم الفصول عددها 6 أعمدة
                   
                    If Y = 6 Then Cells(C + M, Y + 2) = M + t Else Cells(C + M, Y + 2) = M
                    Cells(C + M, Y + 3) = .Cells(R, 2)
                    Cells(C + M, Y + 4) = .Cells(R, 17)
                    Cells(C + M, Y + 5) = .Cells(R, 11)
                    Cells(C + M, Y + 6) = .Cells(R, 7)
                End If
            End If
        End If
    Next R
End With

If t = 50 Then GoTo 2
With Range("B11:L60")

    .Offset(t, 0).Resize(50 - t).EntireRow.Hidden = True
End With

    Application.Calculation = xlCalculationAutomatic

2 Application.ScreenUpdating = True
End Sub

Sub MZM_ClearContents()

With Range("B11:L60")
    .ClearContents
   .EntireRow.Hidden = False
End With
End Sub

Sub MZM_Sort()

With Range("School")
    .Sort .Columns("B:B"), xlAscending
    .Sort .Columns("C:C"), xlDescending
End With
End Sub



1 - تخصيص ورقة عمل بتصميم معين وليكن اسمها كما بالكود ( قوائم الفصول )
2 - تخصيص الخلية ( E2 ) لكي يتم إدخال نصف عدد طلاب الفصل بحيث لا يزيد عن 50 طالب فى حالة معرفتك بعدد طلاب الفصل بحيث يتم قسمة عدد الطلاب على قائمتين وهذا الأمر (( إختياري ))
3 - تخصيص الخلية ( J2 ) فى حالة الرغبة فى تكوين فصول حسب النوع (( ذكر & أنثى )) مع انشاء قائمة منسدلة للإختيار منها النوع
4 - تخصيص الخلية ( L2 ) لإختيار الفصل المراد إنشاء قائمة بأسماء الطلاب له ، مع إنشاء قائمة منسدلة بالفصول لكى يتم اختيار الفصل منها



الخلية E2 ما الفائدة منها ؟

الشرط الافتراضى بالكود البرمجى أعلاه لتكوين قائمة الفصل على قائمتين هنا بداخل الكود أن يكون نصف
عدد طلاب الفصل = 50 طالب

فماذا لو كان عدد اجمالى الفصل يساوى 50 طالب ؟
فى هذه الحالة يكون جلب البيانات داخل قائمة واحدة ولن يكون هناك بيانات داخل القائمتين حسب تنسيق الجدول

يكون الحل المثالي هنا بوضع رقم نصف عدد الفصل بهذه الخليه موضوع الملاحظة
أى نضع رقم 25 بهذه الخلية

Developer MS Office VBA Application, Data Analyst, Designer And Developer of Blogger Templates, Microfinance, HR Specialist, leading businesses, Front End Web Developer.

More About

4 تعليقات

  1. بارك الله فيك
    1. جزاكم الله خيرا
  2. بارك الله فيك
  3. بارك الله فيكم