/ / เรียงลำดับวันเกิดใน Excel VBA

เรียงลำดับวันเกิดใน Excel VBA

ด้านล่างเราจะดูที่โปรแกรมมา Excel VBA ที่ เรียงลำดับวันเกิด เป็นเดือนแรกและวันที่สอง (ดังนั้นเราจึงละเลยปี). เราต้องการวันเกิดที่มีจำนวนเดือนต่ำสุดที่ตำแหน่งแรก หากมีวันเกิดที่มีจำนวนเดือนเท่ากันเราต้องการวันเกิดที่มีจำนวนวันต่ำสุดเป็นอันดับแรก คุณพร้อมไหม?

สถานการณ์:

เรียงวันเกิดตัวอย่าง

หมายเหตุ: วันที่อยู่ในรูปแบบ US เดือนแรกวันที่สอง รูปแบบนี้ขึ้นอยู่กับการตั้งค่าระดับภูมิภาคของ windows

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. เราเริ่มต้นตัวแปร Integer สี่ตัว เราใช้ฟังก์ชัน Month เพื่อรับเดือนของวันที่และ Day function เพื่อให้ได้วันที่เป็นวัน

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; วันที่ของ Niels จะถูกเลือก

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 จะเพิ่มทีละ 1 และทำซ้ำบรรทัดรหัสสำหรับ i = 2 และ j = 4. คุณสามารถเห็น Joost (j = 4) มีจำนวนเดือนที่สูงกว่า Bregje ดังนั้นเราจึงไปที่ next เราได้ผลลัพธ์เดียวกันสำหรับ 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 statement)

Next j

สำหรับ i = 2 และ j = 7 Excel VBA เปลี่ยนวันที่และชื่อ นั่นหมายความว่าเราจะได้ Richard ในตำแหน่งแรกและ Bregje ในตำแหน่งที่ 7 นั่นหมายความว่าเราได้รับ MonthToCheck และ DayToCheck ใหม่เมื่อเริ่มทำซ้ำครั้งต่อไป (สำหรับ i = 2 และ j = 8) ตอนนี้เราจะเปรียบเทียบ Richard กับ Dineke (j = 8) คุณสามารถเห็นได้ง่ายว่าไม่จำเป็นต้องแทนที่วันที่และชื่อดังกล่าวเนื่องจาก Richard มีวันที่ "ต่ำกว่า" ไม่จำเป็นต้องแทนที่ Richard (i = 2) กับ Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) และ Debby (j. = 13) นั่นเป็นเพราะ Richard มีวันที่ "ต่ำสุด" ด้วยวิธีนี้ Excel VBA จะได้รับสำหรับวันที่ "ต่ำสุด" ในตำแหน่งแรก (สำหรับ i = 2) เพื่อให้ได้อันดับที่สอง "ต่ำสุด" ในตำแหน่งที่สอง Excel VBA จะทำซ้ำขั้นตอนเดียวกันสำหรับ i = 3 เพื่อให้ได้ตำแหน่งที่สามที่ "ต่ำสุด" ในตำแหน่งที่สาม Excel VBA จะทำซ้ำขั้นตอนเดียวกันสำหรับ i = 4, เป็นต้น

8. ปิดวนรอบแรกสำหรับถัดไป (ด้านนอกของคำสั่ง if)

Next i

9. ทดสอบโปรแกรมของคุณ

ผล:

เรียงลำดับวันเกิดใน Excel VBA

อ่านเพิ่มเติมได้ที่: