Page 1 of 1

สอบถามเกี่ยวกับ Code VBA เรื่องการลบแถวที่ไม่ต้องการครับ

Posted: Sat Nov 24, 2012 12:35 pm
by niwat2811
รบกวนสอบถามท่านผู้รู้เรื่องการลบแถวที่ไม่เข้ากับเงื่อนไขที่ต้องการ
เงื่อนไขที่ต้องการ คือ
ถ้าเลขที่บัญชีไม่ซ้ำกัน แต่ประเภทไม่ใช่ manual ให้ลบแถวนั้นออกไป
ถ้าเลขที่บัญชีซ้ำกัน และประเภทเป็น manual เช่น เลขที่ 2222 ซ้ำกันและประเภทเป็น manual ซ้ำกัน ไม่ต้องลบให้คงเหลือไว้เหมือนเดิม
ถ้าเลขที่บัญชีซ้ำกัน แต่ประเภทมีทั้ง manual และ auto เช่น เลขที่ 5555 ซ้ำกัน แต่ประเภทมีทั้ง manual และ auto ให้ลบทั้งสองแถวเลย
คำตอบที่ต้องการอยู่ที่ Sheet3 ครับ รบกวนท่านผู้รู้ช่วยปรับ Code ให้ด้วยครับ
Code อยู่ใน Module1 ชื่อ Sub DeleteRow ครับ

Re: สอบถามเกี่ยวกับ Code VBA เรื่องการลบแถวที่ไม่ต้องการครับ

Posted: Sat Nov 24, 2012 1:22 pm
by snasui
:D ช่วยยกตัวอย่างมาด้วยครับว่า ซ้ำ ที่พูดถึงนั้นดูอย่างไร เขียนคำอธิบายในคอลัมน์ D ต่อท้ายรายการต่าง ๆ ที่ต้องการลบ พร้อมอธิบายว่า ที่ลบนั้นเข้าเงื่อนไขใด เพื่อจะได้เข้าใจตรงกันครับ

Re: สอบถามเกี่ยวกับ Code VBA เรื่องการลบแถวที่ไม่ต้องการครับ

Posted: Sat Nov 24, 2012 1:38 pm
by niwat2811
เพื่มเติมครับ อาจจะอธิบายไม่ละเอียด
คือว่า ถ้าเลขที่ใดมีเลขเดียวและประเภทเป็น manual ให้เอาไว้ ไม่ต้องลบครับ แต่ถ้ามีเลขเดียวแต่ประเภทไม่ใช่ manual ให้ลบออกไปเลยครับ
ถ้าเลขที่ใดซ้ำกันไม่ว่าจะซ้ำกี่จำนวนก็แล้วแต่ สมมติว่าเลขที่ซ้ำกัน 5 แถวและประเภทเป็น manual เหมือนกันทั้ง 5 แถว ให้คงเหลือไว้ทั้ง 5 แถว ไม่ต้องลบครับ
แต่ถ้าเลขที่ใด้ซ้ำกันไม่ว่าจะซ้ำกี่จำนวนก็แล้วแต่ สมมติว่าเลขที่ซ้ำกัน 5 แถวและประเภทมีอย่างอื่นปนอยู่ที่ไม่ใช่ manual ทั้งหมดให้ลบออกไปทั้ง 5 แถวนั้นเลยครับ

Re: สอบถามเกี่ยวกับ Code VBA เรื่องการลบแถวที่ไม่ต้องการครับ

Posted: Sat Nov 24, 2012 2:02 pm
by snasui
:D ลองปรับ Code เป็นด้านล่างครับ

Code: Select all

Sub Deleterow()
    Dim r As Range
    Dim rAll As Range
    With Sheets("Sheet1")
        Set rAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    For Each r In rAll
        With Application
            If .CountIf(rAll, r) <> .CountIfs(rAll, r, rAll.Offset(0, 2), "manual") Then
                r.ClearContents
            End If
        End With
    Next r
    rAll.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Re: สอบถามเกี่ยวกับ Code VBA เรื่องการลบแถวที่ไม่ต้องการครับ

Posted: Sat Nov 24, 2012 2:07 pm
by niwat2811
ทดสอบ code แล้วครับ ใช้งานได้ตรงตามที่ต้องการเลยครับ ขอบคุณอาจารย์มากเลยครับ

Re: สอบถามเกี่ยวกับ Code VBA เรื่องการลบแถวที่ไม่ต้องการครับ

Posted: Sat Nov 24, 2012 2:18 pm
by niwat2811
อาจารย์ครับ ผมได้ลองกด F8 แล้วลอง Run Code ดูที่ละบรรทัดแต่ก็ยังไม่เข้าใจ Code เลยครับ รบกวนท่านอาจารย์ช่วยแจงให้เพื่อความกระจ่างหน่อยนะครับ ตรงนี้ครับ

Code: Select all

With Application
            If .CountIf(rAll, r) <> .CountIfs(rAll, r, rAll.Offset(0, 2), "manual") Then
                r.ClearContents
            End If
        End With
เหมือนกับว่าไปทำค่า r ให้เป็นค่าว่าง แต่งงว่ามันไปเช็คค่าตรงไหน ขอบคุณล่วงหน้าครับ

Re: สอบถามเกี่ยวกับ Code VBA เรื่องการลบแถวที่ไม่ต้องการครับ

Posted: Sat Nov 24, 2012 2:22 pm
by snasui
:D เป็นการใช้ Worksheet Function มาช่วย

สำหรับ Countif ดูที่นี่ครับ http://office.microsoft.com/th-th/excel ... aspx?CTT=1
ส่วน Countifs ดูที่นี่ครับ http://office.microsoft.com/th-th/excel ... aspx?CTT=1

จากนั้นลองแทนค่าดูน่าจะเข้าใจ Code ได้ไม่ยากครับ

Re: สอบถามเกี่ยวกับ Code VBA เรื่องการลบแถวที่ไม่ต้องการครับ

Posted: Sat Nov 24, 2012 2:33 pm
by niwat2811
ครับ ยังไม่ค่อยเข้าใจแต่ก็จะพยายามศึกษาต่อไปครับ ขอบคุณท่านอาจารย์มากครับ