snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#1
Post
by duangneth.ko » Mon Dec 05, 2011 1:05 pm
ถึง คุณคนควน
หากข้อมูลเรามีบรรทัดจำนวนมากและมีหลาย sheet แต่บางบรรทัดไม่มีตัวเลข ซึ่งเราต้องการเขียน macro เพื่อให้ลบบรรทัดที่ไม่มีตัวเลขออก เพื่อให้การทำงานเร็วขึ้น เราต้องทำอย่างไรค่ะ ?? รบกวนขอคำแนะนำดังนี้ค่ะ
1. ต้องการ macro เพื่อลบบรรทัดที่ไม่มีตัวเลขเพื่อความรวดเร็วค่ะ
2. ต้องการ macro เพื่อซ่อนแถวที่ไม่มีตัวเลขเพื่อความรวดเร็วค่ะ
3. ต้องการ macro เพื่อโชว์แถวที่ซ่อนไว้ทั้งหมดค่ะ
ขอบคุณค่ะ
Duangneth Ko,
snasui
Site Admin
Posts: 30920 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#2
Post
by snasui » Mon Dec 05, 2011 3:05 pm
สิ่งที่ถามมานั้นสามารถทำการบันทึก Macro แล้วนำ Code ที่ได้มาปรับปรุงต่อไปเพื่อให้ใช้ได้กับหลาย ๆ ชีท ผู้ที่จะใช้ Macro แสดงว่าเข้าใจ สามารถปรับปรุงแก้ไขเองได้บ้าง จึงควรเขียนมาเองครับ ติดขัดตรงไหนก็ถามมาได้เรื่อย ๆ ครับ
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#3
Post
by duangneth.ko » Mon Dec 05, 2011 5:31 pm
ถึง คุณคนควน
ดิฉันต้องขอโทษด้วยค่ะ แต่ดิฉันไม่เคยเขียน Macro เพียงแต่ทราบว่าถ้าเขียน Macro แล้วสามารถทำได้ จึงรบกวนขอคำแนะนำจากคุณค่ะ
ขอบคุณค่ะ
จุ๊บ
snasui
Site Admin
Posts: 30920 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#4
Post
by snasui » Mon Dec 05, 2011 5:53 pm
พยายามงดถามถึงผมโดยตรงนะครับ เนื่องจากท่านที่ทราบจะไม่เข้ามาตอบจะทำให้เสียเวลารอคอยนานหากผมไม่ว่าง
ผมได้แนะนำเพื่อนสมาชิกทั้งหลายที่เคยถามปัญหาเกี่ยวกับ Macro มาก่อนหน้านี้ว่าให้ทำมาก่อน แล้วมาสอบถามกันเฉพาะส่วนที่ติดขัด โดยผมไม่ทำตัวอย่างหรือตอบไปให้ก่อนซึ่งผมจำเป็นต้องปฏิบัติให้เสมอภาคกันกับทุก ๆ ท่านครับ
อย่างที่บอกไปแล้วว่าผู้ถามจำเป็นจะต้องมีความรู้เพื่อที่จะปรับปรุงเองได้ ซึ่งนั่นหมายความว่า สามารถบันทึก Macro เองได้ด้วย หากยังไม่เคยบันทึก Macro ผมขอแนะนำให้หาหนังสือมาอ่านก่อนดีกว่าครับ
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#5
Post
by duangneth.ko » Mon Dec 05, 2011 6:10 pm
ต้องขอโทษด้วยค่ะ ดิฉันพยายามค้นหาจาก 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
จริง ๆ แล้ว สิ่งที่ดิฉันต้องการคือ การลบบรรทัดที่ไม่มีมูลค่าออกไป เนื่องจากข้อมูลดิฉันเยอะมากค่ะ ถ้าเขียนได้ มันจะช่วยประหยัดเวลาการทำงานได้มากเลยทีเดียว
รบกวนแนะนำด้วยค่ะ
จุ๊บ
snasui
Site Admin
Posts: 30920 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#6
Post
by snasui » Mon Dec 05, 2011 6:13 pm
ช่วยแนบไฟล์ตัวอย่างพร้อม Code มาด้วยครับ จะได้ช่วยกันทดสอบได้
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#7
Post
by duangneth.ko » Mon Dec 05, 2011 6:33 pm
ไม่ทราบว่า File ที่แนบไปผ่านหรือเปล่าค่ะ เนื่องจากพอคลิกที่ตั้งกระทู้ แล้ว error ค่ะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30920 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#8
Post
by snasui » Mon Dec 05, 2011 6:46 pm
คุณจุ๊บนำ Code มาใช้ตรง ๆ โดยไม่ปรับปรุงก็ย่อมใช้ไม่ได้ ซึ่ง Code ที่แนบมากับสิ่งที่ต้องการให้ทำงานอยู่คนละช่วงเซลล์ครับ เซลล์ที่ต้องการให้ตรวจสอบอยู่ในคอลัมน์ A แต่ Code ที่แนบมานั้นไปตรวจสอบค่าในคอลัมน์ E
นอกจากนี้การตรวจสอบจะตรวจสอบค่าที่เป็น 0 ไม่ใช่ตรวจสอบค่าที่มีค่าเท่ากับ NO
ลองปรับปรุง Code มาดูครับ โดยเปลี่ยน
Range("e:e") เป็น
Range("A:A") และเปลี่ยน UCase(cell.Value) = "NO" เป็น
cell.Value = 0
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#9
Post
by duangneth.ko » Mon Dec 05, 2011 7:03 pm
ได้แล้วค่ะ 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 ไม่ยอมลบค่ะ
รบกวนด้วยค่ะ
จุ๊บ
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#10
Post
by duangneth.ko » Mon Dec 05, 2011 7:06 pm
รบกวนช่วยแนะนำหนังสือด้วยได้หรือเปล่าค่ะ จุ๊บจะได้หามาศึกษาเพิ่มเติม เกรงใจค่ะ
ขอบคุณค่ะ
จุ๊บ
snasui
Site Admin
Posts: 30920 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#11
Post
by snasui » Mon Dec 05, 2011 7:38 pm
การลบไม่เหมือนการซ่อนหรือยกเลิกการซ่อนครับ ปกติเมื่อลบด้วยการ 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/
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#12
Post
by duangneth.ko » Mon Dec 05, 2011 8:08 pm
ขอบคุณมากค่ะ เดี๋ยวจุ๊บจะลองทำดูน๊ะค่ะ เมื่อสักครู่ออกไปหาซื้อหนังสือมา แต่ยังไม่ได้ค่ะ
จุ๊บ
ChoBkuN
Member
Posts: 239 Joined: Tue Nov 29, 2011 3:43 pm
#13
Post
by ChoBkuN » Wed Dec 07, 2011 9:43 am
สุดยอด
โปรแกรมบัญชีบางตัวเมื่อ export GL ออกมาแล้ว มักจะพบปัญหา รายงานออกมาบรรทัดเว้นบรรทัด
ถ้าใช้วิธีนี้ ก็สามารถแก้ปัญหาได้
แต่เดิมใช้เพิ่มช่องลากเลขจนสุด แล้ว filter เอา blank ออก
ขอบคุณครับ
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#14
Post
by duangneth.ko » Fri Dec 16, 2011 3:04 pm
ทำไมข้อมูลที่ Post ส่วนท้ายถึงหายไปค่ะ เพราะล่าสุด จุ๊บ เปิดดูวันอังคาร ยังมี Macro ที่เขียนเรื่องการลบบรรทัดทั้ง Sheet เลยค่ะ
snasui
Site Admin
Posts: 30920 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#15
Post
by snasui » Fri Dec 16, 2011 3:10 pm
ฟอรัมถูก Restore มาใหม่เนื่องจากมีปัญหาครับ ต้องขออภัยสำหรับกรณีดังกล่าวครับ
duangneth.ko
Member
Posts: 16 Joined: Sat Jun 05, 2010 9:18 pm
#16
Post
by duangneth.ko » Fri Dec 16, 2011 3:12 pm
จุ๊บไม่ Save ตัว Macro ที่ลบบรรทัด แบบทั้ง Sheet ไว้เลยค่ะ รบกวนขออีกครั้งได้ ??? ขอบคุณค่ะ
snasui
Site Admin
Posts: 30920 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#17
Post
by snasui » Fri Dec 16, 2011 3:20 pm
ลองตาม 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