การเรียงข้อมูลหลายแผ่นงานพร้อมกัน
ใน Excel ถ้ามีการจัดเก็บข้อมูลโครงสร้างเหมือนกัน แต่แยกเก็บในหลายแผ่นงาน เช่น อาจจะแยกเป็นรายภูมิภาค รายร้านค้า รายแผนก หรือ อื่น ๆ เป็นต้น การเรียงข้อมูลในแต่ละแผ่นงาน จะทำได้ช้า โดยเฉพาะถ้ามีแผ่นงานจำนวนมาก ยิ่งจะช้ามาก เนื่องจากต้องทำทีละแผ่นงาน
การเรียงข้อมูลหลายแผ่นงานพร้อมกัน ต้องใช้ VBA หรือ แมโคร ช่วย
วิธีการเรียกใช้งาน แมโคร ให้ดูเรื่อง การคัดลอกข้อมูลจากหลายแผ่นงาน ของ Excel
ข้อควรระวัง
เมื่อเรียงข้อมูลแล้ว จะย้อนกลับเดิมไม่ได้ ดังนั้นก่อนเรียงข้อมูลควรคัดลอกข้อมูลเดิมไว้ก่อน หรือคัดลอกข้อมูลไปที่อื่น แล้วจึงทำการใช้แมโครนี้
Sub SortAllSheets()
'ปรับแก้ตามข้อมูลของท่าน
Const firstColToSort = "A" ' คอลัมน์แรก
Const lastColToSort = "C" ' คอลัมน์สุดท้าย
Const keyCol = "A" ' คอลัมน์ที่จะให้เรียงข้อมูล
' คอลัมน์ที่มีข้อมูลทุกแถว
'อาจจะใช้ keyCol ก็ได้ แต่ไม่จำเป็น
Const testCol = "C"
' แถวเริ่มต้นข้อมูล (หัวตาราง)
Const startFrom = 1
Dim anyWS As Worksheet
Dim sortRange As Range
Dim sortKey As Range
'next improves performance
Application.ScreenUpdating = False
For Each anyWS In ThisWorkbook.Worksheets
Set sortRange = anyWS.Range(firstColToSort & startFrom & ":" _
& lastColToSort & _
anyWS.Range(testCol & Rows.Count).End(xlUp).Row)
Set sortKey = anyWS.Range(keyCol & 2)
sortRange.Sort Key1:=sortKey, Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Next
Set sortRange = Nothing
Set sortKey = Nothing
Set anyWS = Nothing
End Sub
การปรับใช้งาน
ถ้าข้อมูลเริ่มที่ A1 โดยเป็นหัวตาราง และข้อมูลจริงเริ่มที่ A2 จะสามารถใช้ได้เลย โดยไม่ต้องปรับเปลี่ยน
แต่ถ้าข้อมูลเริ่มต้นในตำแหน่งอื่น ต้องปรับตำแหน่งที่ระบุใน แมโคร ให้ถูกต้องด้วย เช่น ข้อมูลเริ่มต้นที่เซลล์ A3
ให้เปลี่ยนตำแหน่งเริ่มต้น ดังนี้
' แถวเริ่มต้นข้อมูล
startFrom = 3
เป็นต้น
ที่มา
www.excelbanter.com/showthread.php?t=259638
การเรียงข้อมูลหลายแผ่นงานพร้อมกัน ต้องใช้ VBA หรือ แมโคร ช่วย
วิธีการเรียกใช้งาน แมโคร ให้ดูเรื่อง การคัดลอกข้อมูลจากหลายแผ่นงาน ของ Excel
ข้อควรระวัง
เมื่อเรียงข้อมูลแล้ว จะย้อนกลับเดิมไม่ได้ ดังนั้นก่อนเรียงข้อมูลควรคัดลอกข้อมูลเดิมไว้ก่อน หรือคัดลอกข้อมูลไปที่อื่น แล้วจึงทำการใช้แมโครนี้
Sub SortAllSheets()
'ปรับแก้ตามข้อมูลของท่าน
Const firstColToSort = "A" ' คอลัมน์แรก
Const lastColToSort = "C" ' คอลัมน์สุดท้าย
Const keyCol = "A" ' คอลัมน์ที่จะให้เรียงข้อมูล
' คอลัมน์ที่มีข้อมูลทุกแถว
'อาจจะใช้ keyCol ก็ได้ แต่ไม่จำเป็น
Const testCol = "C"
' แถวเริ่มต้นข้อมูล (หัวตาราง)
Const startFrom = 1
Dim anyWS As Worksheet
Dim sortRange As Range
Dim sortKey As Range
'next improves performance
Application.ScreenUpdating = False
For Each anyWS In ThisWorkbook.Worksheets
Set sortRange = anyWS.Range(firstColToSort & startFrom & ":" _
& lastColToSort & _
anyWS.Range(testCol & Rows.Count).End(xlUp).Row)
Set sortKey = anyWS.Range(keyCol & 2)
sortRange.Sort Key1:=sortKey, Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Next
Set sortRange = Nothing
Set sortKey = Nothing
Set anyWS = Nothing
End Sub
การปรับใช้งาน
ถ้าข้อมูลเริ่มที่ A1 โดยเป็นหัวตาราง และข้อมูลจริงเริ่มที่ A2 จะสามารถใช้ได้เลย โดยไม่ต้องปรับเปลี่ยน
แต่ถ้าข้อมูลเริ่มต้นในตำแหน่งอื่น ต้องปรับตำแหน่งที่ระบุใน แมโคร ให้ถูกต้องด้วย เช่น ข้อมูลเริ่มต้นที่เซลล์ A3
ให้เปลี่ยนตำแหน่งเริ่มต้น ดังนี้
' แถวเริ่มต้นข้อมูล
startFrom = 3
เป็นต้น
ที่มา
www.excelbanter.com/showthread.php?t=259638
ความคิดเห็น
แสดงความคิดเห็น