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

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

ฟอรั่มถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถาม-ตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบ ต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. อธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. ควรแนบตัวอย่างไฟล์มาที่ฟอรั่มนี้เพื่อเพิ่มความสะดวกในการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่น นอกจากนี้ไม่ควรแนบไฟลที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. สำหรับคำถามเกี่ยวกับ VBA ให้ลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน ควรโพสต์ Code ให้แสดงเป็น Code เพื่อสะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. แจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
kannaree
Member
Member
Posts: 128
Joined: Thu Nov 19, 2015 12:07 pm

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

#1

Postby kannaree » Tue May 02, 2017 1:50 pm

สวัสดีคะ ติดปัญหาเรื่องต้องการลบ 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

Postby kannaree » Tue May 02, 2017 2:15 pm

มีการแก้ไขโค้ดเป็นแบบนี้แล้วค่ะ ไม่ต้องเอาเมาส์ไปอยู่ที่ 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

Postby kannaree » Tue May 02, 2017 2:17 pm

ขอโทษค่ะ ลืมลบ 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

Postby kannaree » Tue May 02, 2017 4:08 pm

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

Code: Select all

 If .Value = "407"  Or  .Value = "309" Then .EntireRow.Delete


ขอบคุณมากค่ะ


ถามอีกคำถามนึงนะคะ ถ้าจะทำปุ่มกดฟังก์ชั่นนี้ให้ไปอยู่ใน ใน Sheet2 แต่ ลบแถว Sheet1 จะต้องเพิ่มโค้ดตรงส่วนไหนคะ

niwat2811
Bronze
Bronze
Posts: 290
Joined: Thu Jan 06, 2011 12:51 pm

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

#5

Postby niwat2811 » Wed May 03, 2017 1:55 pm

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

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

Postby kannaree » Thu May 04, 2017 9:17 am

ขอบคุณ 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

Postby kannaree » Thu May 04, 2017 9:20 am

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

Code: Select all

 For i = lr To 2 Step -1


เมื่อมีข้อมูลมาก ประมาณ 70,000 records

User avatar
snasui
Site Admin
Site Admin
Posts: 21781
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#8

Postby snasui » Thu May 04, 2017 10:11 pm

:D แก้ไขการประกาศตัวแปร i เสียใหม่ให้เป็น Long แทนของเดิมที่เป็น Integer ครับ

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

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

#9

Postby kannaree » Fri May 05, 2017 8:36 am

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

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

Code: Select all

If .Range("A" & i).Value = "14*" Or .Range("A" & i).Value = "17*" Then

niwat2811
Bronze
Bronze
Posts: 290
Joined: Thu Jan 06, 2011 12:51 pm

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

#10

Postby niwat2811 » Fri May 05, 2017 4:39 pm

ลองปรับ 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

Postby kannaree » Mon May 08, 2017 3:10 pm

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


Return to “Excel”

Who is online

Users browsing this forum: No registered users and 36 guests