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

จัดเรียงตัวเลขใน Excel VBA

ด้านล่างเราจะดูที่โปรแกรมมา Excel VBA ที่ เรียงลำดับตัวเลข.

สถานการณ์:

ตัวอย่างเรียงลำดับตัวเลข

วางปุ่มคำสั่งในแผ่นงานของคุณและเพิ่มบรรทัดรหัสต่อไปนี้:

1. ขั้นแรกเราจะประกาศตัวแปรสามชนิด Integer และหนึ่ง Range object

Dim i As Integer, j As Integer, temp As Integer, rng As Range

2 เราเริ่มต้นวัตถุ Range rng ด้วยตัวเลขในคอลัมน์ A เราใช้คุณสมบัติ CurrentRegion สำหรับข้อมูลนี้ CurrentRegion มีประโยชน์เมื่อเราไม่ทราบขอบเขตแน่นอนของช่วงล่วงหน้า (เราต้องการให้โปรแกรมนี้ทำงานได้ 9 หมายเลข แต่มีตัวเลข 90 ตัวด้วย)

Set rng = Range("A1").CurrentRegion

3. เราเริ่มต้นสองครั้งสำหรับลูปถัดไป

For i = 1 To rng.Count
    For j = i + 1 To rng.Count

คำอธิบาย: rng.Count เท่ากับ 9 ดังนั้นสองบรรทัดแรกจะลดลงเป็น For i = 1 ถึง 9 และสำหรับ j = i + 1 ถึง 9. สำหรับ i = 1, j = 2, 3, ... , 8 และ 9 ตรวจสอบแล้ว

4. เมื่อต้องการจัดเรียงหมายเลขอย่างถูกต้องเราจะเปรียบเทียบหมายเลขแรกกับหมายเลขถัดไป ถ้าหมายเลขถัดไปมีขนาดเล็กลงเราจะสลับหมายเลข เพิ่มคำสั่ง If Then ต่อไปนี้

If rng.Cells(j) < rng.Cells(i) Then

End If

หากข้อความข้างต้นเป็นความจริงเราจะสลับหมายเลข

ตัวอย่างเช่น: สำหรับ i = 1 และ j = 2 จำนวน 2 และ 10 จะถูกนำมาเปรียบเทียบ คำแถลงข้างต้นไม่เป็นความจริง ดังนั้นไม่จำเป็นต้องสลับหมายเลข Excel VBA เพิ่มทีละ 1 และทำซ้ำบรรทัดรหัสสำหรับ i = 1 และ j = 3. คุณสามารถเห็นว่า 5 มีขนาดใหญ่กว่า 2 ดังนั้นยังไม่จำเป็นต้องสลับตัวเลข เราได้ผลลัพธ์เดียวกันสำหรับ j = 4, j = 5 และ j = 6. เมื่อเรามาถึง j = 7 คำแถลงข้างต้นเป็นจริงเนื่องจาก 1 มีขนาดเล็กกว่า 2

5. เราแลกเปลี่ยนหมายเลข เราเก็บหมายเลขหนึ่งไว้ชั่วคราวเพื่อให้ Excel VBA สามารถแลกเปลี่ยนหมายเลขได้อย่างถูกต้อง เพิ่มบรรทัดรหัสต่อไปนี้ในคำสั่ง if

"swap numbers
temp = rng.Cells(i)
rng.Cells(i) = rng.Cells(j)
rng.Cells(j) = temp

6. เราปิดลำดับที่สองสำหรับถัดไป (ด้านนอกของคำสั่ง if)

Next j

สำหรับ i = 1 และ j = 7 Excel VBA ได้เปลี่ยนค่าหมายเลข นั่นหมายความว่าเราได้อันดับที่ 1 และ 2 ในตำแหน่งที่ 7 ตอนนี้เรามี 1 ตำแหน่งแรกเราจะเปรียบเทียบค่านี้กับ 5 (สำหรับ j = 8) และ 4 (สำหรับ j = 9) ไม่จำเป็นต้องสลับหมายเลข (1 คือหมายเลขที่เล็กที่สุด) วิธีนี้ Excel VBA ได้รับ (สำหรับ i = 1) จำนวนน้อยที่สุดในตำแหน่งแรก เพื่อให้ได้หมายเลขที่เล็กที่สุดเป็นอันดับสองในตำแหน่งที่สอง Excel VBA จะทำซ้ำขั้นตอนเดียวกันสำหรับ i = 2 เพื่อให้ได้ตัวเลขที่เล็กที่สุดที่สามในตำแหน่งที่สาม Excel VBA จะทำซ้ำขั้นตอนเดียวกันสำหรับ i = 3 ฯลฯ

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

Next i

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

ผล:

จัดเรียงตัวเลขใน Excel VBA

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