Page 1 of 1

รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 1:05 pm
by duangneth.ko
ถึง คุณคนควน

หากข้อมูลเรามีบรรทัดจำนวนมากและมีหลาย sheet แต่บางบรรทัดไม่มีตัวเลข ซึ่งเราต้องการเขียน macro เพื่อให้ลบบรรทัดที่ไม่มีตัวเลขออก เพื่อให้การทำงานเร็วขึ้น เราต้องทำอย่างไรค่ะ ?? รบกวนขอคำแนะนำดังนี้ค่ะ
1. ต้องการ macro เพื่อลบบรรทัดที่ไม่มีตัวเลขเพื่อความรวดเร็วค่ะ
2. ต้องการ macro เพื่อซ่อนแถวที่ไม่มีตัวเลขเพื่อความรวดเร็วค่ะ
3. ต้องการ macro เพื่อโชว์แถวที่ซ่อนไว้ทั้งหมดค่ะ

ขอบคุณค่ะ
Duangneth Ko,

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 3:05 pm
by snasui
:D สิ่งที่ถามมานั้นสามารถทำการบันทึก Macro แล้วนำ Code ที่ได้มาปรับปรุงต่อไปเพื่อให้ใช้ได้กับหลาย ๆ ชีท ผู้ที่จะใช้ Macro แสดงว่าเข้าใจ สามารถปรับปรุงแก้ไขเองได้บ้าง จึงควรเขียนมาเองครับ ติดขัดตรงไหนก็ถามมาได้เรื่อย ๆ ครับ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 5:31 pm
by duangneth.ko
ถึง คุณคนควน

ดิฉันต้องขอโทษด้วยค่ะ แต่ดิฉันไม่เคยเขียน Macro เพียงแต่ทราบว่าถ้าเขียน Macro แล้วสามารถทำได้ จึงรบกวนขอคำแนะนำจากคุณค่ะ

ขอบคุณค่ะ
จุ๊บ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 5:53 pm
by snasui
:D พยายามงดถามถึงผมโดยตรงนะครับ เนื่องจากท่านที่ทราบจะไม่เข้ามาตอบจะทำให้เสียเวลารอคอยนานหากผมไม่ว่าง

ผมได้แนะนำเพื่อนสมาชิกทั้งหลายที่เคยถามปัญหาเกี่ยวกับ Macro มาก่อนหน้านี้ว่าให้ทำมาก่อน แล้วมาสอบถามกันเฉพาะส่วนที่ติดขัด โดยผมไม่ทำตัวอย่างหรือตอบไปให้ก่อนซึ่งผมจำเป็นต้องปฏิบัติให้เสมอภาคกันกับทุก ๆ ท่านครับ

อย่างที่บอกไปแล้วว่าผู้ถามจำเป็นจะต้องมีความรู้เพื่อที่จะปรับปรุงเองได้ ซึ่งนั่นหมายความว่า สามารถบันทึก Macro เองได้ด้วย หากยังไม่เคยบันทึก Macro ผมขอแนะนำให้หาหนังสือมาอ่านก่อนดีกว่าครับ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 6:10 pm
by duangneth.ko
ต้องขอโทษด้วยค่ะ ดิฉันพยายามค้นหาจาก Internet โดยดิฉันได้วิธีการเขียน code แต่เมื่อนำไปใช้จริง มันไม่สามารถใช้ได้ค่ะ ดิฉันไม่แน่ใจว่าติดตรงส่วนใด
ดิฉันทดลองคีย์ข้อมูล A1:A13 โดย A6:A9 ไม่มีมูลค่าค่ะ

Sub HideRows()
Dim cell As Range
For Each cell In Range("e:e")
If UCase(cell.Value) = "NO" Then
cell.EntireRow.Hidden = True
End If
Next
End Sub

จริง ๆ แล้ว สิ่งที่ดิฉันต้องการคือ การลบบรรทัดที่ไม่มีมูลค่าออกไป เนื่องจากข้อมูลดิฉันเยอะมากค่ะ ถ้าเขียนได้ มันจะช่วยประหยัดเวลาการทำงานได้มากเลยทีเดียว

รบกวนแนะนำด้วยค่ะ
จุ๊บ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 6:13 pm
by snasui
:D ช่วยแนบไฟล์ตัวอย่างพร้อม Code มาด้วยครับ จะได้ช่วยกันทดสอบได้

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 6:33 pm
by duangneth.ko
ไม่ทราบว่า File ที่แนบไปผ่านหรือเปล่าค่ะ เนื่องจากพอคลิกที่ตั้งกระทู้ แล้ว error ค่ะ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 6:46 pm
by snasui
:shock: คุณจุ๊บนำ Code มาใช้ตรง ๆ โดยไม่ปรับปรุงก็ย่อมใช้ไม่ได้ ซึ่ง Code ที่แนบมากับสิ่งที่ต้องการให้ทำงานอยู่คนละช่วงเซลล์ครับ เซลล์ที่ต้องการให้ตรวจสอบอยู่ในคอลัมน์ A แต่ Code ที่แนบมานั้นไปตรวจสอบค่าในคอลัมน์ E

นอกจากนี้การตรวจสอบจะตรวจสอบค่าที่เป็น 0 ไม่ใช่ตรวจสอบค่าที่มีค่าเท่ากับ NO

ลองปรับปรุง Code มาดูครับ โดยเปลี่ยน

Range("e:e") เป็น Range("A:A") และเปลี่ยน UCase(cell.Value) = "NO" เป็น cell.Value = 0

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 7:03 pm
by duangneth.ko
ได้แล้วค่ะ Hiderow แล้วถ้าเป็น Delete จุ๊บลองเปลี่ยน code ดู
Sub Deleterow()
Dim cell As Range
For Each cell In Range("a:a")
If UCase(cell.Value) = "0" Then
cell.EntireRow.Delete = True
End If
Next
End Sub
เหตุใด macro ถึงลบให้จุ๊บแค่บรรทัด A9 บรรทัดเดียวค่ะ บรรทัด A6:A8 ไม่ยอมลบค่ะ

รบกวนด้วยค่ะ
จุ๊บ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 7:06 pm
by duangneth.ko
รบกวนช่วยแนะนำหนังสือด้วยได้หรือเปล่าค่ะ จุ๊บจะได้หามาศึกษาเพิ่มเติม เกรงใจค่ะ

ขอบคุณค่ะ
จุ๊บ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 7:38 pm
by snasui
:D การลบไม่เหมือนการซ่อนหรือยกเลิกการซ่อนครับ ปกติเมื่อลบด้วยการ Loop จะลบจากล่างขึ้นบนหรือจากขวาไปซ้าย Code ถึงจะทำงานถูกต้อง แต่ถ้าใช้เทคนิคการหา Special cells เช่น เซลล์ว่างก็สามารถลบเซลล์ว่างทั้งหมดได้พร้อมกันทันที

ตัวอย่างการปรับปรุง Code เพื่อซ่อนบรรทัดที่มีค่าเป็น 0

Code: Select all

Sub HideRows()
    Dim cell As Range
    Dim AllCell As Range
    With Sheets("Sheet1")
        Set AllCell = .Range("A1", .Range( _
            "A" & Rows.Count).End(xlUp))
    End With
    For Each cell In AllCell
        If cell = 0 Then
            cell.EntireRow.Hidden = True
        End If
    Next
End Sub
ตัวอย่างการลบบรรทัดที่มีค่าเป็น 0

Code: Select all

Sub Deleterow()
    Dim cell As Range
    Dim AllCell As Range
    With Sheets("Sheet1")
        Set AllCell = .Range("A1", .Range( _
            "A" & Rows.Count).End(xlUp))
    End With
    For Each cell In AllCell
        If cell = 0 Then
            cell.ClearContents
        End If
    Next
    AllCell.SpecialCells(xlCellTypeBlanks) _
        .EntireRow.Delete
End Sub
สำหรับหนังสือลองดูที่นี่ครับ http://www.spreadsheetpage.com/index.php/book/C45/

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Mon Dec 05, 2011 8:08 pm
by duangneth.ko
ขอบคุณมากค่ะ เดี๋ยวจุ๊บจะลองทำดูน๊ะค่ะ เมื่อสักครู่ออกไปหาซื้อหนังสือมา แต่ยังไม่ได้ค่ะ

จุ๊บ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Wed Dec 07, 2011 9:43 am
by ChoBkuN
สุดยอด
โปรแกรมบัญชีบางตัวเมื่อ export GL ออกมาแล้ว มักจะพบปัญหา รายงานออกมาบรรทัดเว้นบรรทัด
ถ้าใช้วิธีนี้ ก็สามารถแก้ปัญหาได้

แต่เดิมใช้เพิ่มช่องลากเลขจนสุด แล้ว filter เอา blank ออก
ขอบคุณครับ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Fri Dec 16, 2011 3:04 pm
by duangneth.ko
ทำไมข้อมูลที่ Post ส่วนท้ายถึงหายไปค่ะ เพราะล่าสุด จุ๊บ เปิดดูวันอังคาร ยังมี Macro ที่เขียนเรื่องการลบบรรทัดทั้ง Sheet เลยค่ะ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Fri Dec 16, 2011 3:10 pm
by snasui
:D ฟอรัมถูก Restore มาใหม่เนื่องจากมีปัญหาครับ ต้องขออภัยสำหรับกรณีดังกล่าวครับ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Fri Dec 16, 2011 3:12 pm
by duangneth.ko
จุ๊บไม่ Save ตัว Macro ที่ลบบรรทัด แบบทั้ง Sheet ไว้เลยค่ะ รบกวนขออีกครั้งได้ ??? ขอบคุณค่ะ

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Fri Dec 16, 2011 3:20 pm
by snasui
:) ลองตาม Code นี้ครับ

Code: Select all

Sub Deleterow()
    Dim cell As Range
    Dim AllCell As Range
    Dim wsh As Worksheet
    On Error Resume Next
    For Each wsh In Worksheets
        With wsh
            Set AllCell = wsh.Range("A1", wsh.Range( _
                "A" & Rows.Count).End(xlUp))
        End With
        For Each cell In AllCell
            If cell = 0 Then
                cell.ClearContents
            End If
        Next
        AllCell.SpecialCells(xlCellTypeBlanks) _
            .EntireRow.Delete
    Next wsh
End Sub

Re: รบกวนสอบถามเรื่อง Macro ค่ะ

Posted: Fri Dec 16, 2011 3:26 pm
by duangneth.ko
ขอบคุณค่ะ