PDA

View Full Version : ลบแถวที่มีค่าว่างเปล่าหรือค่าศูนย์ทิ้งไป



virai06
12 Jun 2007, 20:44
สวัสดีค่ะอาจารย์ที่เคารพนับถือทุกท่าน
ตามไฟล์ที่แนบ ดิฉันต้องการลบแถวที่แสดงค่าศูนย์ทิ้งไป หรือแถวใดที่เป็นคอลัมน์ C6 , c7,c11,c12,c15 ถึง c23 ซึ่งเป็นCELL มีค่าว่างเปล่า หรือมีค่าเป็นศูนย์ ทิ้งไป
กล่าวคือCELL ใดของแต่ละแถวที่มีค่าเป็น 0 หรือค่าว่างเปล่า ให้ลบทิ้งไปไม่ต้องแสดงผลออกมา
(บริเวณที่ทำสีเขียวจะลบทิ้ง )
ข้อมูลจริงอาจมีมากกว่าตัวอย่าง เป็นพันๆรายการบรรทัดลงมา
จะใช้คำสั่งVBA อย่างไรคะ เพราะดิฉันจะไปประยุกต์เข้ากับมาร์โครเดิมที่มีอยู่ในปุ่มกด
ขอความอนุเคราะห์ด้วยคะ ขอบพระคุณอย่างสูง

มิตรภาพ
12 Jun 2007, 21:11
ยังงงๆอยู่้นะครับ
1.ลบเซลที่มี 0 ให้เป็นเซลเปล่าๆ?
หรือ
2.ลบบรรทัดทิ้งไปเลย ที่มีเซลใดก็ตามเป็น 0?
หรือ
3.ลบข้อมูลในบรรทัด ที่มีเซลใดก็ตามเป็น 0 แสดงไว้เพียงบรรทัดว่างๆ?
หรือ
4.ซ่อนบรรทัด ที่มีเซลใดก็ตามเป็น 0?
ช่วยยืนยันมาอีกทีครับ

virai06
12 Jun 2007, 21:22
บรรทัดนั้นทิ้งไปเลยค่ะ เพราะไม่ต้องการเอาตัวเลขนั้นมาแสดงหรือนำมาคำนวณต่อ
ขอบคุณมากค่ะ

virai06
12 Jun 2007, 21:35
เพิ่มเติมอีกนิดค่ะ ข้อมูลหลังลบค่า0 หรือค่าว่างเปล่าแล้วจะเป็นไปตามตัวอย่างที่แนบมามาให้ใหม่ค่ะ

zv735
12 Jun 2007, 22:21
อย่างนี้ได้หรือเปล่าครับ



Sub DeleteZero()
LastLine = Range("C65536").End(xlUp).Row
For i = LastLine To 1 Step -1
If (Range("C" & i).Value = 0) Or (Range("C" & i).Value = "") Then
Rows(i & ":" & i).Delete Shift:=xlUp
End If
Next i
End Sub


ดู File แนบนะครับ

มิตรภาพ
12 Jun 2007, 22:26
ลองวิธีนี้นะครับ สามารถประยุกต์ใช้ VBA ทำก็ได้

1. ที่คอลัมน์ G ระบายพื้นที่ตั้งแต่ G1 ถึง G บรรทัดสุดท้าย
2. ใส่สูตร =IF(OR(A2=0,B2=0,C2=0,D2=0,E2=0,F2=0),"1","") แล้วกด Ctrl+Enter สูตรจะเข้าไปอยู่ในทุกเซลที่ระบายไว้
3. ใช้ AutoFilter โดยกำหนดให้เลือกแสดงค่า "ไม่ว่าง" ที่คอลัมน์ G
4. ตอนนี้จะมองเห็นเฉพาะบรรทัดที่มี 0 ให้ delete บรรทัดทิ้งทั้งหมดเลย
5. ยกเลิกการใช้ AutoFilter ก็จะเหลือแต่บรรทัดที่ไม่มี 0

คงเป็นวิธีหนึ่งเท่านั้นครับ น่าจะมีวิธีอื่นๆอีก รอท่านต่อไปนะครับ

อรวีร์
13 Jun 2007, 09:54
ปกติเวลาจะลบบรรทัดหลายบรรทัดตามเงื่อนไขที่กำหนด อรวีร์จะใช้วิธีใส่สูตรใน Column ว่างโดยสูตรนั้นจะได้ผลลัพธ์เป็น #N/A ถ้าเป็นไปตามเงื่อนไขที่จะลบ
เสร็จแล้วใช้คำสั่ง Edit->Goto->Special แลือก Formulas แบบ Error
แล้ว Edit->Delete->Entire Row
ถ้าข้อมูลมากๆเป็นหมื่นบรรทัด อาจเพิ่มคำสั่ง Sort ก่อน Delete ค่ะ
ลองดู Code ค่ะ

Dim LastRow As Long
LastRow = [A65535].End(xlUp).Row
With Range("G1:G" & LastRow)
.FormulaR1C1 = "=IF(RC3=0,NA( ),1)"
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
.ClearContents
End With


ทดลองลบบรรทัดนี้ก่อนเพื่อทดสอบ
.ClearContents
แล้วแก้
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
เป็น
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Select
แล้วลอง Run ดูค่ะ

virai06
16 Jun 2007, 15:00
ขอบพระคุณอาจารย์ที่ชี้แนะทุกท่าน อาจารย์อรวีร์ ค่ะ ดิฉันขออนุญาตเรียนเพิ่มคะ เนื่องจากดิฉันจำเป็นต้องนำสูตรไปไว้ในปุ่มกดที่วางไว้แถวแรก ปรากฎเจอปัญหาตามไฟล์แนบ มีวิธีแก้ได้อย่างไรคะ (หมายถึงแถวแรกเป็นหัวข้อเรื่องไม่ต้องการให้ลบทิ้ง และเป็นที่ฝังสูตรและปุ่มกด)
ให้ลบเฉพาะในขอบเขตของตารางข้อมูลที่เป้นค่าศุนย์และค่าว่างเท่านั้น
ขอบพระคุณอย่างสูงค่ะ
LastRow = [A65535].End(xlUp).Row

อรวีร์
17 Jun 2007, 10:28
การบอกคำตอบที่คุณ virai06 ต้องการเป็นเรื่องง่ายกว่าการอธิบาย แต่ web นี้มีเป้าหมายเพื่อการศึกษาเรียนรู้ ไม่ใช่ให้ Solution
อรวีร์เลยเลือกที่จะอธิบายยาวๆดีกว่าค่ะ

คุณ virai06 ควรทดลองศึกษาทำความเข้าใจแต่ละคำสั่ง โดยทำให้บางบรรทัดไม่ทำงาน( ใส่ ' ) หรือใส่ Msgbox เพื่อให้แสดงค่าบ้างค่าออกมา ลอง Run Code นี้ดูค่ะ

Dim LastRow As Long
LastRow = [A65535].End(xlUp).Row
MsgBox "บรรทัดสุดท้าย = " & LastRow
With Range("G1:G" & LastRow)
.FormulaR1C1 = "=IF(RC3=0,NA( ),1)"
' .SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
' .ClearContents
End With
MsgBox "ใส่สูตรในช่วง " & Range("G1:G" & LastRow).Address

เสร็จแล้วดูสูตรที่อยู่ใน Column G
เมื่อเข้าใจแล้วก็ลองแก้ไข Code ให้เริ่มใส่สูตรตั้งแต่บรรทัดที่ 2 แทนตั้งแต่บรรทัดที่ 1
----------------------------------------------------------------
ส่วนความหมายของ
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
ให้ลองดูในคำตอบที่แล้วค่ะ

หรือลองบันทึก Macro ของการใช้คำสั่ง Edit--> Goto--> Special--> Formula แบบ Error
และบันทึก Macro ของการใช้คำสั่ง Edit--> Delete. . .--> Entire Row