วิธีการแยกไฟล์ Excel ที่มีหลายชีท ใน 1 ไฟล์

จริง ๆแล้ว เราสามารถทำได้ 2 วิธีหลักๆ นะคะ คือการ “ย้ายหรือคัดลอก” (Move or Copy) ทีละชีทด้วยมือ หรือใช้ VBA (Macro) เพื่อแยกชีททั้งหมดอัตโนมัติค่ะ คือ


🎯 วิธีที่ 1: ย้ายหรือคัดลอกทีละชีท (วิธี Manual)

วิธีนี้เหมาะสำหรับไฟล์ที่มีจำนวนชีทไม่มาก (เช่น 2-10 ชีท) เพราะทำได้ง่ายและไม่ต้องยุ่งกับโค้ดค่ะ

  1. เปิดไฟล์ Excel ต้นฉบับของคุณ
  2. ไปที่ชีทที่คุณต้องการแยก คลิกขวาที่แท็บชื่อชีท (เช่น “Sheet1”)
  3. เลือกเมนู “ย้ายหรือคัดลอก…” (Move or Copy…)
  4. ในหน้าต่าง “ย้ายหรือคัดลอก” ที่เด้งขึ้นมา:
    • ตรงช่อง “ไปยังสมุดงาน:” (To book:) ให้คลิกเลือก “(สมุดงานใหม่)” ((new book))
    • (สำคัญ) ถ้าคุณต้องการให้ชีทนี้ หายไป จากไฟล์เดิม (คือการ “ย้าย”) ก็กด OK ได้เลย แต่ถ้าคุณต้องการแค่ สำเนา ชีทนี้ไปไฟล์ใหม่ โดยที่ไฟล์เดิมยังมีชีทนี้อยู่ครบ (คือการ “คัดลอก”) ให้ติ๊กเครื่องหมายถูกที่ “สร้างสำเนา” (Create a copy) ก่อน
  5. กด “OK”
  6. Excel จะเปิดหน้าต่างใหม่ขึ้นมา เป็นไฟล์ใหม่ที่มีแค่ชีทที่คุณเลือกเพียงชีทเดียว
  7. ไปที่ File > Save As… (ไฟล์ > บันทึกเป็น…) เพื่อบันทึกไฟล์ใหม่นี้เป็นไฟล์ .xlsx ตามชื่อที่คุณต้องการ
  8. กลับไปทำซ้ำขั้นตอนที่ 2-7 กับชีทอื่นๆ ที่เหลือจนครบ (อันนี้ครูจินต์รู้สึกว่ามันใช้เวลามาก เลยไม่แนะนำค่ะ แต่ถ้าใครที่ชอบวิธีนี้ ก็สามารถทำได้ค่ะ)

🚀 วิธีที่ 2: ใช้ VBA (Macro) (วิธีอัตโนมัติ)

วิธีนี้เหมาะสำหรับไฟล์ที่มีชีทจำนวนมาก (เช่น 10 ชีทขึ้นไป) จะช่วยประหยัดเวลาได้มหาศาลเลยค่ะ

ข้อควรระวัง: ควรสำรองข้อมูล (Backup) ไฟล์ต้นฉบับของคุณไว้ก่อนรัน Macro เสมอค่ะ

  1. เปิดไฟล์ Excel ต้นฉบับที่คุณต้องการแยกชีท
  2. กดปุ่ม Alt + F11 เพื่อเปิดหน้าต่าง VBA Editor (Visual Basic for Applications)
  3. ที่เมนูด้านบน คลิก Insert > Module (จะมีหน้าต่างโค้ดว่างๆ สีขาวเปิดขึ้นมาทางขวา)
  4. คัดลอก (Copy) โค้ดด้านล่างนี้ ไปวางในหน้าต่าง Module (หน้าสีขาว) นั้น

Sub SplitSheetsToNewFiles()
Dim ws As Worksheet
Dim OriginalWorkbook As Workbook
Dim NewWorkbook As Workbook
Dim FilePath As String

' ตั้งค่าไฟล์ต้นฉบับ
Set OriginalWorkbook = ActiveWorkbook

' หาตำแหน่งที่อยู่ของไฟล์ต้นฉบับเพื่อใช้เป็นที่บันทึกไฟล์ใหม่
FilePath = OriginalWorkbook.Path

' ตรวจสอบว่าไฟล์หลักถูกบันทึกหรือยัง
If FilePath = "" Then
    MsgBox "กรุณาบันทึกไฟล์หลักของคุณก่อนรันสคริปต์นี้", vbInformation, "ยังไม่ได้บันทึก"
    Exit Sub
End If

Application.ScreenUpdating = False ' ปิดการอัปเดตหน้าจอเพื่อความเร็ว

' วนลูปทำซ้ำทุกชีทในไฟล์ต้นฉบับ
For Each ws In OriginalWorkbook.Worksheets
    ' คัดลอกชีทปัจจุบันไปสร้างไฟล์ใหม่
    ws.Copy

    ' ตั้งค่าไฟล์ใหม่ที่เพิ่งถูกสร้าง
    Set NewWorkbook = ActiveWorkbook

    ' พยายามบันทึกไฟล์ใหม่โดยใช้ชื่อเดียวกับชื่อชีท
    ' และบันทึกไว้ในโฟลเดอร์เดียวกับไฟล์ต้นฉบับ
    On Error Resume Next ' จัดการกรณีชื่อชีทมีอักขระพิเศษที่ใช้ตั้งชื่อไฟล์ไม่ได้
    NewWorkbook.SaveAs Filename:=FilePath & "\" & ws.Name & ".xlsx", _
                       FileFormat:=xlOpenXMLWorkbook ' บันทึกเป็น .xlsx
    On Error GoTo 0

    ' ปิดไฟล์ใหม่ที่เพิ่งบันทึกไป
    NewWorkbook.Close SaveChanges:=False
Next ws

Application.ScreenUpdating = True ' เปิดการอัปเดตหน้าจอคืนค่าเดิม

MsgBox "แยกไฟล์ทั้งหมดเรียบร้อยแล้ว!"

End Sub

5. คลิกที่ใดก็ได้ในโค้ด แล้วกดปุ่ม F5 (หรือกดปุ่ม Play ▶ สีเขียว บนแถบเครื่องมือ) เพื่อรันสคริปต์

6. รอสักครู่… เมื่อเสร็จแล้ว จะมีข้อความแจ้งว่า “แยกไฟล์ทั้งหมดเรียบร้อยแล้ว!”

7. ไฟล์ใหม่ๆ ที่ถูกแยกออกมา (ไฟล์ละ 1 ชีท) จะถูกบันทึกไว้ในโฟลเดอร์เดียวกับไฟล์ต้นฉบับของคุณ โดยใช้ชื่อชีทเป็นชื่อไฟล์ค่ะ


📑 การเพิ่มปุ่ม “Developer” (นักพัฒนา)

นี่คือวิธีมาตรฐานอีกวิธีในการเปิด VBA Editor ค่ะ

  1. ดูที่แถบเมนู (Ribbon) ด้านบนของ Excel (ที่มี File, Home, Insert, …) ว่ามีแท็บ “Developer” (นักพัฒนา) หรือไม่

2. ถ้ามีแท็บ “Developer”: ให้คลิกที่แท็บนั้น แล้วมองหาปุ่มแรกทางซ้ายสุดที่ชื่อ “Visual Basic” (ที่เป็นรูปไอคอนโค้ด)

3. ถ้าไม่มีแท็บ “Developer”: คุณต้องเปิดใช้งานก่อน โดยไปที่:

  • File (ไฟล์) > Options (ตัวเลือก)
  • เลือก Customize Ribbon (กำหนดแถบเครื่องมือเอง)
  • ในช่องทางขวา (Main Tabs) ให้ติ๊กเครื่องหมายถูกที่หน้า “Developer” (นักพัฒนา)
  • กด OK แล้วกลับไปทำตามขั้นตอนที่ 2

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x