/ / فرز أعياد الميلاد في Excel VBA

فرز أعياد الميلاد في Excel VBA

أدناه سننظر في برنامج في Excel VBA أن فرز اعياد الميلاد إلى الأشهر الأولى والأيام الثانية (لذلك نحن نتجاهلسنوات). نريد عيد الميلاد مع أقل رقم شهر في الموضع الأول. إذا كان هناك أعياد ميلاد بأرقام شهر متساوية ، فنحن نريد عيد الميلاد الذي يحتوي على أقل عدد من اليوم. هل أنت جاهز؟

موقف:

فرز مثال أعياد الميلاد

ملاحظة: التواريخ في تنسيق الولايات المتحدة. الأشهر الأولى ، الأيام الثانية. يعتمد هذا النوع من التنسيقات على الإعدادات الإقليمية لنوافذك.

1. أولا ، نعلن ثمانية متغيرات. متغير تاريخ واحد نسميه tempDate ، متغير سلسلة واحد نسميه tempName. المتغيرات الستة الأخرى هي متغيرات Integer مع أسماء monthToCheck ، dayToCheck ، monthNext ، dayNext ، i و j.

Dim tempDate As Date, tempName As String
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. نبدأ اثنين للحصول على الحلقات التالي.

For i = 2 To 13
    For j = i + 1 To 13

مثال: بالنسبة إلى i = 2 ، يتم تحديد j = 3 و 4 و ... و 12 و 13.

3. نقوم بتهيئة أربعة متغيرات عدد صحيح. نحن نستخدم وظيفة الشهر للحصول على شهر تاريخ ووظيفة اليوم للحصول على يوم من التاريخ.

monthToCheck = month(Cells(i, 2).Value)
dayToCheck = day(Cells(i, 2).Value)

monthNext = month(Cells(j, 2).Value)
dayNext = day(Cells(j, 2).Value)

على سبيل المثال: في البداية ، ل i = 2 ؛ تاريخ Bregje ، و j = i + 1 = 2 + 1 = 3؛ سيتم اختيار تاريخ نيلز.

4. لفرز التواريخ بشكل صحيح ، نقوم بمقارنة التاريخ الأول (monthToCheck و dayToCheck) بالتاريخ التالي (monthNext و dayNext). إذا كان التاريخ التالي "أقل" ، فسنقوم بتبديل التواريخ والأسماء. أضف العبارة التالية If Then.

If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then

End If

إذا كان البيان أعلاه صحيحًا ، فسنقوم بتبديل التواريخ والأسماء.

فمثلا: ل i = 2 و j = 3 ، يتم التحقق من تاريخ Bregje و Niels. MonthNext = 6، monthToCheck = 2. العبارة أعلاه غير صحيحة منذ monthNext أعلى من monthToCheck. يقوم برنامج Excel VBA بزيادة قيمة J بمقدار 1 ويكرر خطوط التعليمة البرمجية لـ i = 2 و j = 4. يمكنك بسهولة رؤية أن Joost (j = 4) يحتوي على رقم شهر أعلى من Bregje ، لذلك نذهب إلى السطر التالي. نحصل على نفس النتيجة لـ j = 5 و j = 6. عندما نصل إلى j = 7 ، لدينا المتغيرات التالية: monthNext = 2 و dayNext = 9. MonthToCheck = 2 و dayToCheck = 12. الآن البيان أعلاه صحيح منذ monthNext = monthToCheck و dayNext (9) أقل من dayToCheck (12).

5. نحن مبادلة التواريخ. نقوم مؤقتًا بتخزين تاريخ واحد إلى tempDate ، بحيث يمكن لـ Excel VBA تبديل التواريخ بشكل صحيح. قم بإضافة أسطر التعليمات البرمجية التالية في عبارة If.

"swap dates
tempDate = Cells(i, 2).Value
Cells(i, 2).Value = Cells(j, 2).Value
Cells(j, 2).Value = tempDate

6. نفعل نفس الشيء مع الأسماء. قم بإضافة أسطر التعليمات البرمجية التالية في عبارة If.

"swap names
tempName = Cells(i, 1).Value
Cells(i, 1).Value = Cells(j, 1).Value
Cells(j, 1).Value = tempName

7. نغلق الثانية للحلقة التالية (خارج بيان If).

Next j

بالنسبة لـ i = 2 و j = 7 ، قام Excel VBA باستبدال التواريخوالأسماء. وهذا يعني أن نحصل ريتشارد في المركز الأول وBregje في موقف 7. وهذا يعني أيضا أن نحصل على monthToCheck الجديدة وdayToCheck في بداية دينا التكرار التالي (لأنني = 2 و ي = 8). سنقارن الآن ريتشارد مع دينكي (ي = 8). يمكنك أن ترى بسهولة أنه لا توجد حاجة لاستبدال تلك التواريخ والأسماء لأن ريتشارد لديه تاريخ "أقل". كما واقع الأمر، ليست هناك حاجة لاستبدال ريتشارد (ط = 2) مع يناير (ي = 9)، ويندي (ي = 10)، يروين (ي = 11)، جون (ي = 12) وديبي (ي = 13). هذا لأن ريتشارد لديه "أدنى" التاريخ. بهذه الطريقة سيحصل Excel VBA (لـ i = 2) على "أدنى" التاريخ في الموضع الأول. للحصول على الثاني "أدنى" التاريخ في المرتبة الثانية، إكسل VBA يكرر نفس الخطوات بالضبط لأنني = 3. للحصول على ثالث "أدنى" التاريخ في المركز الثالث، إكسل VBA يكرر نفس الخطوات بالضبط لأنني = 4، إلخ

8. أغلق حلقة For Next التالية (خارج بيان If).

Next i

9. اختبار البرنامج الخاص بك.

نتيجة:

فرز أعياد الميلاد في Excel VBA

اقرأ أيضًا: