กรณีที่ต้องส่งข้อมูลใด ๆ ให้กับลูกค้าอยู่เป็นประจำ และมีความจำเป็นต้องแยกบันทึกข้อมูลเป็นแต่ละไฟล์ตามรายชื่อลูกค้า หากต้องทำด้วยวิธีปกติโดยไม่พึ่งพา VBA คงสิ้นเปลืองเวลาไม่น้อย ซึ่งขึ้นอยู่กับปริมาณลูกค้า ถ้าหากมีลูกค้าจำนวนมาก ย่อมต้องใช้เวลามาก ความผิดพลาดก็มีโอกาสเกิดขึ้นมากเป็นเงาตามตัวไปด้วย
สมมุติว่าเราต้องส่งข้อมูลใบแจ้งหนี้ให้กับลูกค้าเป็นประจำทุกอาทิตย์ โดยมีข้อมูลตามลักษณะดังภาพด้านล่าง
ภาพตัวอย่างข้อมูลที่ต้องส่งให้ลูกค้า
เราสามารถนำ VBA มาช่วยจัดการในการจัดเก็บข้อมูลเป็นรายลูกค้าเก็บลงที่ Drive D: โดยมีวิธีการดังนี้
- ที่เซลล์ E1 คีย์
=C1 Enter เป็นการดึงค่า C1 มาใช้ - ที่เซลล์ F1 เขียนสูตร
=SUMPRODUCT(1/COUNTIF(C2:C22,C2:C22))
Enter เพื่อนับจำนวนลูกค้าโดยไม่รวมค่าซ้ำ - จากนั้นกดแป้น Alt+F11 เพื่อเปิดหน้าต่าง VBE และเขียน Code VBA ตามด้านล่างใน Module ปกติ
Option Explicit
Sub SeparateFile()
Dim fName As String, i As Integer
Dim wbs As Workbook, Nwbs As Workbook
Set wbs = ActiveWorkbook
With Application
.ScreenUpdating = False
.DisplayAlerts = False
wbs.Sheets("Sheet1").Range("E3", Range("E" & Rows.Count)) _
.ClearContents
wbs.Sheets("Sheet1").Range("C:C").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:="", CopyToRange:=Range("E3"), Unique:=True
For i = 1 To Range("F1").Value
Range("E2") = Range("E4", Range("E" & Rows.Count).End(xlUp))(i)
Set Nwbs = Workbooks.Add
wbs.Sheets("Sheet1").Range("A:D").AdvancedFilter _
Action:=xlFilterCopy, CriteriaRange:=wbs.Sheets( _
"Sheet1").Range("E1:E2"), CopyToRange:=Range("A1")
fName = Range("C2")
ChDir "D:\"
Nwbs.SaveAs Filename:="D:\" & fName
MsgBox fName & " Save already"
Nwbs.Close
Next i
.ScreenUpdating = True
End With
End Sub - กดแป้น Alt+Q เพื่อกลับมายัง Excel
- กดแป้น Alt+F8 > เลือก SeparateFile > Run
0 ความคิดเห็น:
แสดงความคิดเห็น