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
สิ่งที่ถามมานั้นสามารถทำการบันทึก 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
พยายามงดถามถึงผมโดยตรงนะครับ เนื่องจากท่านที่ทราบจะไม่เข้ามาตอบจะทำให้เสียเวลารอคอยนานหากผมไม่ว่าง
ผมได้แนะนำเพื่อนสมาชิกทั้งหลายที่เคยถามปัญหาเกี่ยวกับ 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
ช่วยแนบไฟล์ตัวอย่างพร้อม 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
คุณจุ๊บนำ 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
การลบไม่เหมือนการซ่อนหรือยกเลิกการซ่อนครับ ปกติเมื่อลบด้วยการ 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
ฟอรัมถูก 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
ขอบคุณค่ะ