การบันทึกข้อมูลแยกรายลูกค้าด้วย VBA

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

สมมุติว่าเราต้องส่งข้อมูลใบแจ้งหนี้ให้กับลูกค้าเป็นประจำทุกอาทิตย์ โดยมีข้อมูลตามลักษณะดังภาพด้านล่าง

ภาพตัวอย่างข้อมูลที่ต้องส่งให้ลูกค้า

Customer
ภาพ 1 ข้อมูล

เราสามารถนำ VBA มาช่วยจัดการในการจัดเก็บข้อมูลเป็นรายลูกค้าได้ครับ

โดยมีวิธีการดังนี้

    1. คีย์ Path ที่ต้องการนำไฟล์ไปวางที่เซลล์ I1
    2. กดแป้น Alt+F11 เพื่อเข้าหน้าต่าง VBE
    3. เข้าเมนู Insert > Module
    4. นำ Code ด้านล่างไปวาง แล้วกดแป้น F5 เพื่อ Run
ption Explicit
Sub SeparateFile()
    Dim fName As String, i As Integer
    Dim wbs As Workbook, Nwbs As Workbook
    Dim pth As String
    Set wbs = ActiveWorkbook
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
    With wbs.Sheets("Sheet1")
        pth = .Range("I1").Value
        .Range("F:G").ClearContents
        .Range("C:C").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:="", CopyToRange:=.Range("F1"), Unique:=True
        .Range("G1").Value = .Range("F1").Value
        For i = 1 To .Range("F2", .Range("F" & .Rows.Count).End(xlUp)).Rows.Count
            .Range("G2").Value = .Range("F2", .Range("F" & .Rows.Count).End(xlUp))(i)
            Set Nwbs = Workbooks.Add
            .Range("A:D").AdvancedFilter _
                Action:=xlFilterCopy, CriteriaRange:=.Range("G1:G2"), _
                CopyToRange:=Nwbs.Sheets("Sheet1").Range("A1")
            fName = .Range("G2").Value & ".xlsx"
            ChDir pth
            Nwbs.SaveAs Filename:=pth & fName
            Nwbs.Close
        Next i
        .Range("F:G").ClearContents
    End With
    Application.ScreenUpdating = True
    MsgBox "Finish", vbInformation
End Sub

สามารถดาวน์โหลดไฟล์แนบเพื่อดูตัวอย่างได้ตามด้านล่างครับ
Revised: June 10, 2017 at 19:13

Leave a Comment

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

Scroll to Top