اللهم يا معلم إبراهيم علمنا ويا مفهم سليمان فهمنا ويا مؤتي الحكمة لقمان اتنا الحكمة وفصل الخطاب وبعد:
أحب أن أقدم لكم هذا الموضوع شارحا فيه تنسيق تحليل نتائج الطلاب عبر الأكواد
وأيضا التنسيق الشرطي وبعضا من الدوال التي نحتاجها في مثل هذا الشرح .
لنفترض أن لدينا جدول بيانات الطلاب من ( a6:i20) وبعضا من الطلاب في الصف الأول الابتدائي وبعضهم من الصف الثاني الابتدائي في ورقة العمل المسماة ( " بيانات الطلاب " )
أولا : نريد أن نرحل كل طلاب صف دراسي في ورقة عمل نسميها باسم كل صف دراسي، ولابد لنا
هنا أن نقوم بإنشاء ورقة عمل باسم كل صف دراسي على حده .
ثانيا : نقوم بفتح محرر الأكواد ( alt+ 11 ) ونذهب إلى إدراج مودل ونكتب الكود التالي في مودل جديد ونضيفه الى زر :
وعمل الكود يقوم بفلترة الطلاب الذين يدرسون في كل صف داراسي ويقوم بترحيل الأسماء والصف بكل محتوياته إلى ورقة العمل المسماة لترحيل إليها.
CODE
Sub trheel()
' مع اسم ورقة العمل ونطاق (a6:i100 )
With Sheets("بيانات الطلاب").Range("a6:i100")
' تجاوز الأخطاء
On Error Resume Next
' اخفاء منع اهتزاز الشاشة
Application.ScreenUpdating = False
' تحديد وضع الفلتره
Selection.AutoFilter
'تنشيط بداية نطاق الفلترة من العمود رقم 3 مع كريتريا المفلترة وهي الصف الدراسي
ActiveSheet.Range("a5:i100").AutoFilter Field:=3, Criteria1:="الأول الابتدائي"
' النطاق الذي تريد نسخه مع نسخ محتويات اخر صف به بيانات
Range("b6:i100" & Cells(Rows.Count, 3).End(xlUp).Row + 1).Copy
'لصق البيانات المنسوخه في شيت الصف الاول الابتدائي بدابة في العمود بي لصق خاص
Sheets("الأول الابتدائي").Range("b" & Sheets("الأول الابتدائي").Cells(Rows.Count, 3).End(xlUp).Row + 1).PasteSpecial (xlPasteValues)
' اخفاء وضع النسخ
Application.CutCopyMode = False
'اظهار منع اهتزاز الشاشة
Application.ScreenUpdating = True
End With
End Sub
ثانيًا : بعد ما رحلنا الأسماء إلى الأوراق العمل التي نريدها نقوم بتنسيق البيانات
وهناك طريقتين في الإكسيل لتنسيق عبر ( أكواد Vba ) أو التنسيق الشرطي .
- لتنسيق ( ورقة العمل المسماة (" الأول الابتدائي ") عبر الأكواد نقوم بالضغط اكلك يمين اسم الشيت بالأسفل ونضغط على عرض التعليمات البرمجية كما في الشكل (1).</li>
- نختار worksheet والحدث selectionchange نكتب الكود التالي لتلوين عمود واحد فقط ( E ) : </li>
بكتابة حلقة تكرارية تبدأ من الصف 6 إلى صف 15 بوجد شرط إذ كانت الخلية تحتوي على كلمة " جيد " لونها باللون البرتقالي معبر عن اللون البرتقالي برقم " 45 " وكلمة " ممتاز " باللون الأخضر برقم " 4 " ونكرر تلوين الخلايا بنفس الطريقة في العمود ( E)بحسب الألوان التي تريدها شاهد مرفق " 4" لمعرفة قائمة ارقام الألوان في أكواد vba :
CODE
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Long
For i = 6 To 15
If Cells(i, "E") = "جيد" Then
Cells(i, "E").Interior.ColorIndex = 45
ElseIf Cells(i, "E") = "<span dir="RTL">ممتاز</span>" Then
Cells(i, "E").Interior.ColorIndex = 4
End If
Next i
End sub
- ولتلوين عدة خلايا متجاورة بناء قيمة خليه في عمود ( i ) نكتب الكود التالي : </li>
- بكتابة حلقة تكرارية تبدأ من الصف 6 إلى صف 15 بوجد شرط إذ كانت الخلية عمود ( i ) تحتوي على كلمة " ممتاز " لونها باللون الأخضر ثم الازاحة ناحية اليمين بمقدار 4 خلايا متجاوره معبر عن اللون الأخضر برقم " 4 " . </li>
وكلمة " جيد جداً " باللون الأزرق برقم " 23 " ونكرر تلوين الخلايا بنفس الطريقة في العمود (i) بحسب الألوان التي تريدها شاهد مرفق" 4" لمعرفة قائمة ارقام الألوان في أكواد vba :
CODE
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim R As Long
For R = 6 To 15
If Cells(R, "I<span dir="RTL"> "ممتاز" = (" </span>Then
Cells(R, "I").Offset(<span dir="RTL">0</span>, <span dir="RTL">0</span>).Interior.ColorIndex = <span dir="RTL">4</span>
Cells(R, "I").Offset(<span dir="RTL">0</span>, -<span dir="RTL">1</span>).Interior.ColorIndex = <span dir="RTL">4</span>
Cells(R, "I").Offset(<span dir="RTL">0</span>, -<span dir="RTL">2</span>).Interior.ColorIndex = <span dir="RTL">4</span>
Cells(R, "I").Offset(<span dir="RTL">0</span>, -<span dir="RTL">3</span>).Interior.ColorIndex = <span dir="RTL">4</span>
ElseIf Cells(R, "I<span dir="RTL"> "جيد جداً" = (" </span>Then
Cells(R, "I").Offset(<span dir="RTL">0</span>, <span dir="RTL">0</span>).Interior.ColorIndex = <span dir="RTL">23</span>
Cells(R, "I").Offset(<span dir="RTL">0</span>, -<span dir="RTL">1</span>).Interior.ColorIndex = <span dir="RTL">23</span>
Cells(R, "I").Offset(<span dir="RTL">0</span>, -<span dir="RTL">2</span>).Interior.ColorIndex = <span dir="RTL">23</span>
Cells(R, "I").Offset(<span dir="RTL">0</span>, -<span dir="RTL">3</span>).Interior.ColorIndex = <span dir="RTL">23</span>
End If
Next R
End sub
ثالثًا : بعد ما تم تنسيق بيانات الطلاب المرحلة نقوم باستخراج اعداد الطلاب الذين اخذوا مستويات تقديرات في المواد الدراسة حسب المرفق رقم ( 1 ) :
ونفتح محرر الأكواد وتكتب دالة countif من خلال الكود التالي :
اذا يوجد في نطاق العمود ( e6:e15) يحتوي على كلمة ممتاز أو جيد جدا أو جيد أو مقبول أو ضعيف مطابق لخلايا عمود ( k) عدها لي في خلايا عمود ( L) مسمى العمود مادة " القران الكريم" :
CODE
Sub cuontif<span dir="RTL">()</span>
Dim i As Long
For i = <span dir="RTL">6 </span>To <span dir="RTL">15</span>
Cells(i, "L") = Application.CountIf([E<span dir="RTL">6</span>:E<span dir="RTL">20</span>], Cells(i, "K<span dir="RTL">(("</span>
Cells(i, "M") = Application.CountIf([I<span dir="RTL">6</span>:I<span dir="RTL">20</span>], Cells(i, "K<span dir="RTL">(("</span>
Next i
End sub
رابعا : لجمع اعداد الطلبة في مستويات التقدير ونفتح محرر الأكواد وتكتب دالة sum من خلال الكود التالي :
تحديد الخليه ( L11) ونكتب الدالة الجمع ونحدد نطاق الخلايا التي نريد جمعها :
CODE
Sub sum ()<br />
[L<span dir="RTL">11</span>] = Application.Sum([L<span dir="RTL">6</span>:L<span dir="RTL">10</span>])<br />
[M<span dir="RTL">11</span>] = Application.Sum([M<span dir="RTL">6</span>:M<span dir="RTL">10</span>])<br />
End sub<br />
خامسًا : في ورقة العمل الثانية تحت مسمى ( " الثاني الابتدائي ") استخدمنا النسيق الشرطي
في تنسيق الجدول شاهد المرفقات ومرفق ملف الشرح
وختامًا اسال الله التوفيق فان اصبت فمن توفيق الله وان أخطأت فمن نفسي والشيطان
لكم خالص التحايا اخوكم / ابومشاري~~~