Page 1 of 1

สอบถามเรื่องการใช้ For Next ครับ

Posted: Sat May 12, 2018 4:16 pm
by sosadboy
เนื่องจากผมได้ศึกษาข้อมูลจากเวป แล้วเอามาประยุกต์ใช้กับงานของตัวเองซึ่งเป็นการตัดรายงานสรุปข้อมูลต่างๆ โดยตัดเอาข้อมูลที่ไม่จำเป็นบางส่วนออกออก โดยเบื้องต้นโค๊ดปัจจุบันได้ผลตามต้องการ แต่ยังมีโค๊ดบางส่วนที่ผมไม่เข้าใจ และอาจมีบางส่วนในโค๊ดที่ไม่จำเป็นต้องเขียนลงไป(เนื่องจากคัดลอกมา) เลยอยากฝากทุกท่านช่วยดูโค๊ดว่ามีส่วนที่ไม่จำเป็นหรือไม่ และอยากช่วยอธิบายการทำงานของโค๊ดส่วนของ With หน่อยครับ เพื่อที่ผมจะได้นำไปใช้ได้อย่างถูกต้องต่อไปครับ

Code: Select all

Sub ClearContentsG16toG21()
    Application.ScreenUpdating = False
    Dim r1, r2 As Range
    Dim i As Integer
    With Worksheets("ตัดสรุป")
        Set r1 = .Range(.Range("D5"), .Range("D65536").End(xlUp))
        Set r2 = .Range(.Range("G5"), .Range("G65536").End(xlUp))
    End With
        For i = r1.Rows.Count To 1 Step -1
        If r1(i) = "รวม B/C จัดเตรียม 10 รายการ" Then
            Exit For
        End If
        If r1(i) <> "" Then
            r2(i).ClearContents
        End If
    Next i
    Application.ScreenUpdating = True 
End Sub
และถ้าจำนวน" 10 " จากโค๊ด

Code: Select all

If r1(i) = "รวม B/C จัดเตรียม 10 รายการ" Then
            Exit For
มีการเปลี่ยนแปลงจำนวนอยู่ตลอดต้องเขียนโค๊ดอย่างไรครับ เนื่องจากที่ผมเขียนใช้ได้กับ 10 รายการเท่านั้น ขอบคุณครับ
ปัญหาVBA ClearContents เซลล์ที่ต้องการ.xlsm

Re: สอบถามเรื่องการใช้ For Next ครับ

Posted: Sun May 13, 2018 12:59 pm
by snasui
:D Code นั้นทำงานกับข้อมูลทั้งหมด ขึ้นอยู่กับว่าคอลัมน์ D มีถึงบรรทัดใด มี 1 ล้านบรรทัดก็ทำงาน 1 ล้านบรรทัดครับ

Code: Select all

If r1(i) = "รวม B/C จัดเตรียม 10 รายการ" Then
            Exit For
หมายถึง ถ้าเซลล์ใดในคอลัมน์ D มีค่าเป็น "รวม B/C จัดเตรียม 10 รายการ" มันก็จะหยุดทำงาน หากไม่ใช้การตรวจสอบนี้ก็ให้ลบทิ้งไปครับ

Re: สอบถามเรื่องการใช้ For Next ครับ

Posted: Mon May 14, 2018 1:24 am
by sosadboy
หากต้องการตรวจสอบแค่ "รวม B/C จัดเตรียม" จาก "รวม B/C จัดเตรียม 10 รายการ" สามารถทำได้หรือไม่ครับ เนื่องจากจำนวนรายการจะมีการเปลี่ยนแปลงอยู่ตลอด

Re: สอบถามเรื่องการใช้ For Next ครับ

Posted: Mon May 14, 2018 5:59 am
by snasui
:D การเขียนด้วย Code ย่อมสามารถทำได้แทบทุกอย่่างตามที่ต้องการ ลองได้เลย ติดแล้วค่อยถามกันครับ

Re: สอบถามเรื่องการใช้ For Next ครับ

Posted: Mon May 14, 2018 11:07 am
by sosadboy
ทำได้แล้วครับเปลี่ยนแปลงโค๊ดนิดหน่อย ขอบคุณที่แนะนำครับ

Code: Select all

Sub ClearContents()
Application.ScreenUpdating = True
Dim r1, r2 As Range
    Dim i As Integer
    With Worksheets("ตัดสรุป")
        Set r1 = .Range(.Range("E5"), .Range("E65536").End(xlUp))
        Set r2 = .Range(.Range("G5"), .Range("G65536").End(xlUp))
    End With
        For i = r1.Rows.Count To 1 Step -1
        If r1(i) <> "" Then
            Exit For
        End If
        If r1(i) = "" Then
            r2(i + 1).ClearContents
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

Re: สอบถามเรื่องการใช้ For Next ครับ

Posted: Mon May 14, 2018 6:19 pm
by sosadboy
สอบถามเพิ่มเติมครับ โค๊ดส่วนนี้หมายความว่าอย่างไรครับ

Code: Select all

Set r1 = .Range(.Range("E5"), .Range("E65536").End(xlUp))

Re: สอบถามเรื่องการใช้ For Next ครับ

Posted: Mon May 14, 2018 6:57 pm
by snasui
:D แปลว่ากำหนดให้ตัวแปร r1 มีค่าเป็นช่วงข้อมูล เริ่มจาก E5 จนถึง E บรรทัดสุดท้ายที่มีข้อมูลครับ