การจัดเรียงข้อมูลที่กระจัดกระจายไว้ในคอลัมน์เดียว (VBA)

การจัดเรียงข้อมูลที่กระจัดกระจายอยู่หลายคอลัมน์ให้มาเรียงในคอลัมน์เดียว นั้น ดูเหมือนว่าหากใช้ VBA ค่อนข้างจะสะดวกกว่าการใช้สูตรครับ

ตัวอย่างตามด้านล่างจะเป็นการจัดเรียงข้อมูลที่อยู่ตั้งแต่คอลัมน์ B เป็นต้นไปมาเรียงใหม่ในคอลัมน์ A โดยเรียงเป็นชุดข้อมูลตามลำดับคอลัมน์ หลักการที่จะทำให้คำนวณได้รวดเร็วนั้น ประการหนึ่งที่สำคัญคือจะต้องหาว่าพื้นที่ใช้งานนั้นมีกี่บรรทัดและมีกี่แถวเพื่อใช้กำหนดขอบเขตในการ Loop ซึ่งจะช่วยเพิ่มความยืดหยุ่นทั้งให้คำนวณรวดเร็วขึ้นกว่าการกำหนดขอบเขตเผื่อเอาไว้ครับ

Sub ListData()
    Dim r As Range, r1 As Range, r2 As Range
    Dim r3 As Range, i As Integer
    Set r1 = ActiveSheet.UsedRange
    For i = 2 To r1.Columns.Count
        Set r2 = Range(r1.Columns(i).Address)
        For Each r3 In r2
            Set r = Cells(Rows.Count, 1) _
                .End(xlUp).Offset(1, 0)
            If r3 <> "" Then
                r = r3
            End If
        Next r3
    Next i
End Sub

แต่หากต้องการให้เรียงตามลำดับแถว Code จะสั้นลงเนื่องจากสามารถใช้ For Each…Next มาเรียงลำดับได้ ตามตัวอย่างด้านล่างครับ

Sub NewArrange()
    Dim r As Range, c As Range
    Dim iCount As Integer
    Dim wsh As Worksheet
    Set wsh = ActiveSheet
    wsh.Range("A:A").ClearContents
    Set r = wsh.UsedRange
    For Each c In r
        If c <> "" Then
            iCount = iCount + 1 
            Cells(iCount, 1) = c
        End If
    Next c
End Sub

และหากว่าต้องการให้ข้อมูลที่นำมาเรียงใหม่นั้นถูกจัดเรียงจากน้อย ไปหามาก สามารถเพิ่ม Code สำหรับจัดเรียงไว้ข้างท้ายได้ตามตัวอย่างด้านล่างครับ

Sub NewArrange()
    Dim r As Range, c As Range
    Dim iCount As Integer
    Dim wsh As Worksheet
    Set wsh = ActiveSheet
    wsh.Range("A:A").ClearContents
    Set r = wsh.UsedRange
    For Each c In r
      If c <> "" Then
         iCount = iCount + 1
         Cells(iCount, 1) = c
      End If
    Next c
    wsh.Range("A:A").Sort Key1:=Range("A1"), _
        Order1:=xlAscending, Orientation:=xlTopToBottom
End Sub

Revised: January 28, 2017 at 16:29

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top