:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

VBA การใช้ Filter เพื่อ Save Unique Item

Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: VBA การใช้ Filter เพื่อ Save Unique Item

Re: VBA การใช้ Filter เพื่อ Save Unique Item

#5

by champize » Sun May 23, 2021 8:49 pm

เรียน อาจารย์
ผมได้ลองทดสอบแล้ว Code ของอาจารย์สามารถใช้ได้ครับ ขอบคุณมากครับ

Re: VBA การใช้ Filter เพื่อ Save Unique Item

#4

by snasui » Sun May 23, 2021 8:16 pm

:D ตัวอย่างการอธิบายวิธีการทำงานประกอบภาพที่แนบมาเพื่อให้ผู้ตอบสามารถเข้าถึงปัญหาได้โดยเร็ว สามารถอธิบายเช่นด้านล่างนี้ครับ
Code ที่แนบมาเริ่มทำงานที่ Sub SplitDataset() จะมีการเรียก Sub Init_Unique_List_Collection เพื่อสร้างรายการเก็บไว้ใน Collection ที่ชีต Helper และจะใช้รายการเหล่านี้ไป Filter ข้อมูลในชีต OT_Report และคัดลอกข้อมูลไปสร้างเป็นไฟล์ใหม่ใน Path ที่กำหนดไว้ด้วย Sub SplitWorksheet

ปัญหาคือ Sub SplitWorksheet ไม่ได้เริ่ม Filter ที่บรรทัดที่ 2 นอกจากนี้ยังไม่ได้คัดลอกบรรทัดที่เป็นยอดรวมไปด้วย
ตัวอย่างการปรับ Code ที่ Sub SplitWorksheet ครับ

Code: Select all

'Other code
With wsSource
    .Range("e" & LastRow + 1).Value = Category_Name
    With .Range(.Cells(2, 1), .Cells(LastRow, LastColumn))
        .AutoFilter .Range("E2").Column, Category_Name
        .Parent.Range("e" & LastRow + 1).ClearContents
        .Parent.UsedRange.Copy
'Other code

Re: VBA การใช้ Filter เพื่อ Save Unique Item

#3

by champize » Sun May 23, 2021 8:08 pm

snasui wrote: Sun May 23, 2021 7:29 pm :D กรุณาแจ้งรายละเอียดเพิ่มเติมติมตามกฎการใช้บอร์ดข้อ 5 ด้านบน นอกจากนี้ช่วยแจ้งลำดับการทดสอบมาว่า คลิกปุ่มไหน คีย์เซลล์ไหน หรือต้องทำอย่างไรในการทดสอบ จะได้เข้าถึงปัญหาได้โดยไวครับ
เรียน อาจารย์
ผมเพิ่งหัดใช้ VBA เป็นครั้งแรกหากอธิบายไม่เข้าใจก็ขอโทษด้วยนะครับ
1. หลังจากกด Run Marco จะได้ไฟล์ตามภาพ "ผลจาก Code ปัจจุบัน" (ปัญหาคือ Column Row ที่ 2 หายไป และไม่มียอด Total ที่บรรทัดสุดท้าย)
2. ซึ่งจริงๆแล้วผมต้องการให้ไฟล์ออกมาแบบภาพ "ที่ต้องการให้เป็น" (มีหัว Column Row ที่ 2 และมียอด Total ที่บรรทัดสุดท้าย)
Attachments
ผลจาก code ปัจจุบัน.PNG
ผลจาก code ปัจจุบัน.PNG (28.58 KiB) Viewed 43 times
ที่ต้องการให้เป็น.PNG
ที่ต้องการให้เป็น.PNG (38.42 KiB) Viewed 43 times

Re: VBA การใช้ Filter เพื่อ Save Unique Item

#2

by snasui » Sun May 23, 2021 7:29 pm

:D กรุณาแจ้งรายละเอียดเพิ่มเติมติมตามกฎการใช้บอร์ดข้อ 5 ด้านบน นอกจากนี้ช่วยแจ้งลำดับการทดสอบมาว่า คลิกปุ่มไหน คีย์เซลล์ไหน หรือต้องทำอย่างไรในการทดสอบ จะได้เข้าถึงปัญหาได้โดยไวครับ

VBA การใช้ Filter เพื่อ Save Unique Item

#1

by champize » Sun May 23, 2021 7:21 pm

เรียน ท่านผู้รู้

ผมต้องการใช้ VBA เพื่อ Filter ค่า Unique ของแต่ละ Office แล้ว Save as report เก็บไว้
โดยได้ลองผิดลองถูกใช้สูตรจาก Google มาดัดแปลง
ตอนนี้ติดปัญหาที่ Code VBA ที่เขียน เริ่ม Filter ที่ Row 1
1. ผมต้องการให้เริ่ม Filter ที่ Row 2 เพื่อเก็บหัว Column row 1 ไว้
2. ต้องการให้แต่ละไฟล์ที่ Save as ติดช่อง Sum Total ด้านล่างไปด้วย
ต้องปรับ Code อย่างไรบ้างครับ
โดยได้ code เบื้องต้นตามไฟล์แนบ

Code: Select all

Option Explicit

Const Target_Folder As String = "C:\Users\win10\Desktop\Macro"
Dim wsSource As Worksheet, wsHelper As Worksheet
Dim LastRow As Long, LastColumn As Long

Sub SplitDataset()
    
    Dim collectionUniqueList As Collection
    Dim i As Long
    
    Set collectionUniqueList = New Collection
    
    Set wsSource = ThisWorkbook.Worksheets("OT_Report")
    Set wsHelper = ThisWorkbook.Worksheets("Helper")
    
    ' Clear Helper Worksheet
    wsHelper.Cells.ClearContents
    
    With wsSource
        .AutoFilterMode = False
        
        LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        LastColumn = .Cells(1, Columns.Count).End(xlToLeft).Column
        
        If .Range("A2").Value = "" Then
            GoTo Cleanup
        End If
        
        Call Init_Unique_List_Collection(collectionUniqueList, LastRow)
        
        Application.DisplayAlerts = False
        
        For i = 1 To collectionUniqueList.Count
                SplitWorksheet (collectionUniqueList.Item(i))
        Next i
        
        ActiveSheet.AutoFilterMode = False
        
    End With

Cleanup:

    Application.DisplayAlerts = True
    Set collectionUniqueList = Nothing
    Set wsSource = Nothing
    Set wsHelper = Nothing

End Sub

Private Sub Init_Unique_List_Collection(ByRef col As Collection, ByVal SourceWS_LastRow As Long)
    
    Dim LastRow As Long, RowNumber As Long
    
    ' Unique List Column
    wsSource.Range("E2:E" & SourceWS_LastRow).Copy wsHelper.Range("A1")
    
    With wsHelper
        
        If Len(Trim(.Range("A1").Value)) > 0 Then
            
            LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
            
            .Range("A1:A" & LastRow).RemoveDuplicates 1, xlNo
            
            LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
            
            .Range("A1:A" & LastRow).Sort .Range("A1"), Header:=xlNo
            
            LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
            
            On Error Resume Next
            For RowNumber = 1 To LastRow
                col.Add .Cells(RowNumber, "A").Value, CStr(.Cells(RowNumber, "A").Value)
            Next RowNumber
           
        End If
    
    End With
    
End Sub

Private Sub SplitWorksheet(ByVal Category_Name As Variant)
    
    Dim wbTarget As Workbook
    
    Set wbTarget = Workbooks.Add
    
    With wsSource
        
        With .Range(.Cells(1, 1), .Cells(LastRow, LastColumn))
            .AutoFilter .Range("E2").Column, Category_Name
            
            .Copy
            
            'wbTarget.Worksheets(1).PasteSpecial xlValues
            wbTarget.Worksheets(1).Paste
            wbTarget.Worksheets(1).Name = "OT Report"
            
            wbTarget.SaveAs Target_Folder & Category_Name & ".xlsx", 51
            wbTarget.Close False
            
        End With
        
    End With
    
    Set wbTarget = Nothing
    
End Sub
Attachments
OT Report - Filter Unique.xlsm
(51.38 KiB) Downloaded 8 times

Top