: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 Delete row แบบมีเงื่อนไข

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

VBA Delete row แบบมีเงื่อนไข

#1

Post by kannaree »

สวัสดีคะ ติดปัญหาเรื่องต้องการลบ Row มีมีเงื่อนไข

ถ้า Code = 407 และ 309 ให้ลบข้อมูลทั้งแถว

ติดปัญหาที่ว่า จากโค้ด ด้านล่าง
ต้องเอาเมาส์ ไปว่างที่ Cell A4(407) ข้อมูลถึงจะถูกลบ แต่เมื่อว่างที่เซลล์อื่น ไม่สามารถทำงานได้

และถ้าต้องการมี 2 Code ที่ต้องการลบ จะต้องเขียนโค้ดอย่างไรค่ะ
33333.png

Code: Select all

Sub deleteRowswithSelectedText()
For Each Cell In Selection
    If Cell.Value = "407" Then
        Rows(Cell.Row).ClearContents
    End If
Next
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
End Sub



You do not have the required permissions to view the files attached to this post.
kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

Re: VBA Delete row แบบมีเงื่อนไข

#2

Post by kannaree »

มีการแก้ไขโค้ดเป็นแบบนี้แล้วค่ะ ไม่ต้องเอาเมาส์ไปอยู่ที่ Cell ที่ต้องการลบแล้ว แต่ถ้ามี number Code มากกว่า 1 ตัวจะต้องเขียนเงื่อนไขตรงไหนคะ

Code: Select all

Sub deleteRowswithSelectedText()
    Dim Firstrow As Long
    Dim Lastrow As Long
    Dim Lrow As Long
    Dim CalcMode As Long
    Dim ViewMode As Long

    With Application
        CalcMode = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With

    'We use the ActiveSheet but you can replace this with
    'Sheets("MySheet")if you want
    With ActiveSheet

        'We select the sheet so we can change the window view
        .Select

        'If you are in Page Break Preview Or Page Layout view go
        'back to normal view, we do this for speed
        ViewMode = ActiveWindow.View
        ActiveWindow.View = xlNormalView

        'Turn off Page Breaks, we do this for speed
        .DisplayPageBreaks = False

        'Set the first and last row to loop through
        Firstrow = .UsedRange.Cells(1).Row
        Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

        'We loop from Lastrow to Firstrow (bottom to top)
        For Lrow = Lastrow To Firstrow Step -1

            'We check the values in the A column in this example
            With .Cells(Lrow, "A")

                If Not IsError(.Value) Then

                    If .Value = "162" Then .EntireRow.Delete
                    'This will delete each row with the Value "ron"
                    'in Column A, case sensitive.
                        
                                 
                       
                       
                End If
                
                

            End With

        Next Lrow

    End With

    ActiveWindow.View = ViewMode
    With Application
        .ScreenUpdating = True
        .Calculation = CalcMode
    End With

End Sub


ลองใช้ Else if แล้วติด Error
kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

Re: VBA Delete row แบบมีเงื่อนไข

#3

Post by kannaree »

ขอโทษค่ะ ลืมลบ Comment

Code: Select all

Sub deleteRowswithSelectedText()
    Dim Firstrow As Long
    Dim Lastrow As Long
    Dim Lrow As Long
    Dim CalcMode As Long
    Dim ViewMode As Long

    With Application
        CalcMode = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With

    
    With ActiveSheet

        
        .Select

        
        ViewMode = ActiveWindow.View
        ActiveWindow.View = xlNormalView

       
        .DisplayPageBreaks = False

       
        Firstrow = .UsedRange.Cells(1).Row
        Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

        For Lrow = Lastrow To Firstrow Step -1

           
            With .Cells(Lrow, "A")

                If Not IsError(.Value) Then

                    If .Value = "162" Then .EntireRow.Delete
                   
                                 
                       
                       
                End If
                
                

            End With

        Next Lrow

    End With

    ActiveWindow.View = ViewMode
    With Application
        .ScreenUpdating = True
        .Calculation = CalcMode
    End With

End Sub

kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

Re: VBA Delete row แบบมีเงื่อนไข

#4

Post by kannaree »

ทำได้แล้วค่ะ โดยเอา Or เข้ามาช่วย

Code: Select all

 If .Value = "407"  Or  .Value = "309" Then .EntireRow.Delete
ขอบคุณมากค่ะ


ถามอีกคำถามนึงนะคะ ถ้าจะทำปุ่มกดฟังก์ชั่นนี้ให้ไปอยู่ใน ใน Sheet2 แต่ ลบแถว Sheet1 จะต้องเพิ่มโค้ดตรงส่วนไหนคะ
niwat2811
Bronze
Bronze
Posts: 346
Joined: Thu Jan 06, 2011 12:51 pm
Excel Ver: 2016

Re: VBA Delete row แบบมีเงื่อนไข

#5

Post by niwat2811 »

ลองปรับเป็นแบบนี้ดูครับ

Code: Select all

Sub test()
Dim lr As Long, i As Integer
Application.ScreenUpdating = False
With Sheets("Sheet1")
    lr = .Range("A" & Rows.Count).End(xlUp).Row
    For i = lr To 2 Step -1
        If .Range("A" & i).Value = "309" Or .Range("A" & i).Value = "407" Then
            .Range("A" & i).EntireRow.Delete
        End If
    Next i
End With
Application.ScreenUpdating = True
End Sub
kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

Re: VBA Delete row แบบมีเงื่อนไข

#6

Post by kannaree »

ขอบคุณ K.niwat2811 มาก ๆ ค่ะ
เมื่อได้ลอง Code ของ K.niwat2811 แล้วเกิดปัญหาที่ว่า ข้อมูลจริงมี 70,000 records เกิด error ในบรรทัดที่ไฮไลท์ ไม่ทราบว่าจะ
ต้องแก้ไขอย่างไรคะ ขอบคุณค่ะ

Code: Select all

 
 Sub test()
Dim lr As Long, i As Integer
Application.ScreenUpdating = False
With Sheets("Sheet1")
    lr = .Range("A" & Rows.Count).End(xlUp).Row
    [color=#FF0000]For i = lr To 2 Step -1[/color]
        If .Range("A" & i).Value = "309" Or .Range("A" & i).Value = "407" Then
            .Range("A" & i).EntireRow.Delete
        End If
    Next i
End With
Application.ScreenUpdating = True
End Sub
 
kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

Re: VBA Delete row แบบมีเงื่อนไข

#7

Post by kannaree »

ขอแก้ไขข้อความค่ะ ไม่ทราบว่าเปลี่ยนสีไม่ได้
Error ที่บรรทัดนี้ค่ะ

Code: Select all

 For i = lr To 2 Step -1 
เมื่อมีข้อมูลมาก ประมาณ 70,000 records
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: VBA Delete row แบบมีเงื่อนไข

#8

Post by snasui »

:D แก้ไขการประกาศตัวแปร i เสียใหม่ให้เป็น Long แทนของเดิมที่เป็น Integer ครับ
kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

Re: VBA Delete row แบบมีเงื่อนไข

#9

Post by kannaree »

ขอบคุณอาจารย์มากค่ะ ความรู้พื้นฐานยังไม่แน่นต้องไปศึกษาเพิ่มเติมตอนนี้อาศัยหาตัวอย่างโค้ดแล้วไปประยุกต์ใช้กับงานตัวเอง ขอบคุณทุกคนมากๆ นะคะ

ขอถามอีกคำถามนึงได้ไหมค่ะ เงื่อนไขที่เป็น 14xxxxxxx 17xxxxx เราสามารถเขียนเงื่อนไข เป็น 14* หนูลองดูแล้วไม่ได้ จะต้องเปลี่ยนเงื่อนไขอย่างไรค่ะ

Code: Select all

If .Range("A" & i).Value = "14*" Or .Range("A" & i).Value = "17*" Then
niwat2811
Bronze
Bronze
Posts: 346
Joined: Thu Jan 06, 2011 12:51 pm
Excel Ver: 2016

Re: VBA Delete row แบบมีเงื่อนไข

#10

Post by niwat2811 »

ลองปรับ Code เป็นแบบนี้ดูครับ

Code: Select all

Sub test1()
Dim lr As Long, i As Long
Application.ScreenUpdating = False
With Sheets("Sheet1")
    lr = .Range("A" & Rows.Count).End(xlUp).Row
    For i = lr To 2 Step -1
        If Left(.Range("A" & i).Value, 2) = "14" Or Left(.Range("A" & i).Value, 2) = "17" Then
            .Range("A" & i).EntireRow.Delete
        End If
    Next i
End With
Application.ScreenUpdating = True
End Sub
kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

Re: VBA Delete row แบบมีเงื่อนไข

#11

Post by kannaree »

ได้แล้วค่ะ ขอบคุณ K.niwat มากค่ะ
Post Reply