/ / מיין ימי הולדת ב - VBA של Excel

מיין ימי הולדת ב - VBA של Excel

להלן נבחן תוכנית ב Excel VBA כי מיון ימי הולדת עד החודשים הראשונים והשני השני (אז אנחנו מתעלמיםשנים). אנחנו רוצים את יום ההולדת עם מספר החודש הנמוך ביותר במיקום הראשון. אם יש ימי הולדת עם מספרי חודש שווים, אנחנו רוצים את יום ההולדת עם מספר היום הנמוך ביותר הראשון. האם אתה מוכן?

מצב:

מיון ימי הולדת

הערה: התאריכים הם בפורמט ארה"ב. חודשים הראשון, ימים שני. סוג זה של פורמט תלוי בהגדרות האזוריות של Windows.

1. ראשית, אנו מכריזים על שמונה משתנים. משתנה תאריך אחד שאנו מכנים tempDate, משתנה מחרוזת אחד שאנו מכנים tempName. ששת המשתנים האחרים הם משתנים שלמים עם שמות 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 (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then

End If

אם האמירה לעיל נכונה, אנו מחליפים את התאריכים והשמות.

לדוגמה: עבור i = 2 ו- j = 3, נבדקים התאריך של Bregje ו- Niels. חודש הבא = 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. כעת, ההצהרה שלמעלה נכונה מאז monthth = monthToCheck ו dayNext (9) הוא נמוך יותר מאשר dayCoCheck (12).

5. אנחנו מחליפים את התאריכים. אנו מאוחסנים באופן זמני תאריך אחד לתאריך, כך ש- Excel VBA יכול להחליף את התאריכים כהלכה. הוסף את שורות הקוד הבאות בהצהרה אם.

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

6. אנחנו עושים את אותו הדבר עם השמות. הוסף את שורות הקוד הבאות בהצהרה אם.

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

7. אנחנו סוגרים את הלולאה השנייה הבאה (מחוץ להצהרה אם).

Next j

עבור i = 2 ו- j = 7, Excel VBA החליף את התאריכיםושמות. זה אומר שאנחנו מקבלים ריצ'רד על המיקום הראשון Bregje במיקום 7. זה גם אומר שאנחנו מקבלים monthToCheck חדש ו dayToCheck בתחילת האיטרציה הבאה שלנו (עבור i = 2 ו- j = 8). כעת נשווה את ריצ'רד עם Dineke (j = 8). אתה יכול בקלות לראות כי אין צורך להחליף את התאריכים והשמות כי ריצ'רד יש תאריך "נמוך". למעשה, אין צורך להחליף את ריצ'רד (i = 2) עם יאן (j = 9), ונדי (j = 10), Jeroen (j = 11), ג'ון (j = 12) ודבי (j = 13). הסיבה לכך היא ריצ 'רד יש את "הנמוך ביותר" תאריך. בדרך זו Excel VBA תקבלו (עבור i = 2) את התאריך "הנמוך ביותר" במיקום הראשון. כדי לקבל את התאריך השני "הנמוך ביותר" במיקום השני, Excel VBA חוזר על אותם השלבים עבור i = 3. כדי לקבל את השלישי "הנמוך ביותר" תאריך במיקום השלישי, Excel VBA חוזרת על אותם צעדים עבור i = 4, וכו '

.8 סגור את הלולאה הראשונה הבאה (מחוץ להצהרה).

Next i

9. בדוק את התוכנית שלך.

תוצאה:

מיין ימי הולדת ב - VBA של Excel

קרא גם: