RSS

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

09 Dec

การจัดเรียงข้อมูลที่กระจัดกระจายอยู่หลายคอลัมน์ให้มาเรียงในคอลัมน์เดียว นั้น ดูเหมือนว่าหากใช้ 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

——————————————–

 
Leave a comment

Posted by on 09/12/2009 in Rerange, Sort

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: