Re: แยกตามสาขาแล้วให้ save แยกเป็นไฟล์ละสาขา
Posted: Wed May 21, 2014 4:23 pm
D2 นี่เป็นค่าอะไรครับ F1คือค่าสูงสุดของแถวข้อมูลที่ไปหามาใช่หรือป่าว
คลังคำตอบแห่งความรู้จากคนไทย เพื่อโลกที่ต้องการเข้าใจในสิ่งเล็ก ๆ อย่างลึกซึ้ง
https://snasui.com/
ค่า F1 คือค่าจำนวนใน Column ใช่หรือป่าวครับsnasui wrote:ผม Copy Code มาให้ตามด้านล่างครับ
Code: Select all
Sub SeparateFile() Dim fname As String Dim i As Integer Application.ScreenUpdating = False For i = 1 To ActiveSheet.Range("F1").Value ActiveSheet.Range("D2") = i ActiveSheet.Columns("A:B").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range _ ("D1:E2"), Unique:=True Columns("A:B").Copy Workbooks.Add ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues fname = "Branch " & i ChDir "D:\" ActiveWorkbook.SaveAs Filename:="D:\" & fname ActiveWindow.Close Next i Application.ScreenUpdating = True End Sub
Statement นี้เป็นการใช้ Advanced Filter มาช่วยในการกรองข้อมูล ความหมายคือ ให้กรองข้อมูลในคอลัมน์ A:B โดยมีเงื่อนไขว่าให้นำคอลัมน์ A มาเฉพาะที่ระบุไว้ใน D2 และนำค่าในคอลัมน์ B มาเฉพาะที่ระบุไว้ใน E2 และนำมาแสดงเฉพาะค่าที่ไม่ซ้ำsnasui wrote:CriteriaRange:=Range("D1:E2"), Unique:=True
จาก Code ข้างต้น จะ error ที่นี่ครับsnasui wrote:การปรับ Code ก็จะเป็นตามด้านล่าง ซึ่งต้องเปลี่ยนข้อมูลในเซลล์ D1 เป็น ชื่อลูกค้า และเปลี่ยนสูตรที่ F1 เป็น =SUMPRODUCT(1/COUNTIF(C2:C22,C2:C22))
Code: Select all
Option Explicit Sub SeparateFile() Dim fname As String Dim i As Integer Application.ScreenUpdating = False Range("D3:D100").ClearContents Range("C:C").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:="", _ copytorange:=Range("D3"), Unique:=True For i = 1 To Range("F1").Value Range("D2") = Range("D4:D100")(i) Range("A:C").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range _ ("D1:E2"), Unique:=True Range("A:C").Copy Workbooks.Add ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues fname = Range("C2") ChDir "D:\" ActiveWorkbook.SaveAs Filename:="D:\" & fname ActiveWindow.Close Next i ActiveSheet.ShowAllData Application.ScreenUpdating = True End Sub
fname = Range("C2") จะต้องระบุให้ชัดเจนว่า C2 ของไฟล์ใด ชีทใด ไม่เช่นนั้นโปรแกรมจะนำ C2 ของไฟล์ที่ Active, Sheet ที่ Active มาใช้ ซึ่งตาม Code ที่แนบมา ไฟล์ที่ Active คือที่เปิดขึ้นมาใหม่ เซลล์ C2 ของทุกชีทยังไม่มีค่าใด ๆ จึงส่งผลให้เกิด Error นอกจากนี้การจะ Save เป็นไฟล์ใด ๆ ข้อมูลที่สำคัญอย่างหนึ่งคือจะต้องระบุนามสกุลไฟล์ด้วยครับgumaynaa wrote:ถ้าหัวตารางมีหลายบรรทัดจะต้องปรับส่วนไหนหรอครับ