Excel: ลบแถวหากเซลล์ในคอลัมน์ใดคอลัมน์หนึ่งว่างเปล่า


23

ฉันเป็นมือใหม่ใน Excel ที่สมบูรณ์ดังนั้นโปรดขอโทษด้วยถ้าสิ่งนี้ง่ายต่อการทำ ฉันได้ตรวจสอบตัวเลือกมากมาย แต่ไม่พบสิ่งที่ฉันต้องการ

โดยพื้นฐานแล้วฉันต้องการลบแถวทั้งหมดที่ไม่มีค่าในคอลัมน์ C ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันกำลังทำสิ่งนี้ด้วยตนเองในตอนนี้สำหรับผลิตภัณฑ์มากกว่า 5,000 รายการและมันทำให้ฉันเสียสติ


2
เหตุใดคำถามที่ถามเกี่ยวกับ Stack OverFlow ด้วยโซลูชั่น VBA ถูกย้ายไปยัง Super User?
brettdj

คำตอบ:


31

คุณสามารถทำได้อย่างรวดเร็วหากเซลล์ว่างเปล่าโดยใช้ SpecialCells

คู่มือ

  • เลือกคอลัมน์ C
  • กดF5จากนั้นSpecial
  • ทำเครื่องหมายBlanksจากนั้นOK(ดูขั้นตอนนี้ในรูปด้านล่าง)
  • ลบแถวที่เลือกไว้ตอนนี้ (เช่นคลิกขวาในส่วนที่เลือก> ลบเซลล์ ... > แถวทั้งหมดหรือผ่านริบบิ้น (ดูภาพหน้าจอที่สอง)

VBA

Sub QuickCull()
    On Error Resume Next
    Columns("C").SpecialCells(xlBlanks).EntireRow.Delete
End Sub

สกรีนช็อตแสดงเมนูไปที่พิเศษ -> ว่าง สกรีนช็อตแสดงวิธีใช้ริบบิ้นเพื่อลบทั้งแถวในรายการที่เลือก


8

นี่คือวิธีการแบบง่าย ๆ

  1. นำไปใช้Auto Filterกับแผ่นงานของคุณ
  2. กรองคอลัมน์Cว่าง
  3. เลือกแถวที่มองเห็นได้ทั้งหมด
  4. ลบแถว
  5. ลบตัวกรอง

กระบวนการนี้สามารถทำงานอัตโนมัติกับ VBA หากจำเป็น ลองเรียกใช้ตัวบันทึกแมโครเพื่อเริ่มต้น


เรียบง่าย แต่มีประสิทธิภาพ ทำงานมหัศจรรย์!
Tiana987642

2

ฉันคิดว่าสิ่งที่ง่ายที่สุดสมมติว่าคุณไม่มีสูตรอื่น ๆ ในเซลล์อื่น ๆ คือการจัดเรียงทุกอย่างด้วยคอลัมน์ C จากนั้นลบแถวทั้งหมดที่มีช่องว่างสำหรับคอลัมน์ C (ฟังก์ชันเรียงลำดับจะใส่ค่าว่างไว้ สำหรับคอลัมน์ C ที่ด้านบนของไฟล์)

สรุป:

  • คลิกที่เซลล์กระดาษที่พับด้านบนเซลล์ที่ระบุว่า "1" และทางด้านซ้ายของเซลล์ที่ทำเครื่องหมาย "A" (เพื่อเน้นทั้งหมด)
  • คลิกที่ Data จากนั้นเรียงลำดับ
  • เรียงตามคอลัมน์ C และทำให้ค่าที่น้อยที่สุดเป็นอันดับแรก
  • เพียงไฮไลต์แถวลงจนกว่าคุณจะกดแถวแรกด้วยค่าสำหรับคอลัมน์ C และลบทุกสิ่งที่คุณเน้นไว้

0

สิ่งนี้น่าจะใช้ได้

Columns("C:C").Select
Set rngRange = Selection.CurrentRegion
lngNumRows = rngRange.Rows.Count
lngFirstRow = rngRange.Row
lngLastRow = lngFirstRow + lngNumRows - 1
lngCompareColumn = ActiveCell.Column
For lngCurrentRow = lngLastRow To lngFirstRow Step -1
If (Cells(lngCurrentRow, lngCompareColumn).Text = "") Then _
Rows(lngCurrentRow).Delete
Next lngCurrentRow

-1

คุณสามารถใส่รหัสนี้ในโมดูลชีต (คลิกเมาส์ขวาที่แท็บแผ่นงานแล้วเลือก "ดูรหัส"):

Sub Delete_Blank_Rows()


'Deletes the entire row within the selection if the ENTIRE row contains no data.

'We use Long in case they have over 32,767 rows selected.

Dim i As Long
Dim LastRow As Integer

'We turn off calculation and screenupdating to speed up the macro.

 With Application
     .Calculation = xlCalculationManual
     .ScreenUpdating = False

     'Reduce the work on the calc and define the range

     LastRow = Range("A" & Rows.Count).End(xlUp).Row
     Range("A2:A" & LastRow).Select

     'We work backwards because we are deleting rows.

     For i = Selection.Rows.Count To 1 Step -1
          If WorksheetFunction.CountA(Selection.Rows(i)) = 0 Then
              Selection.Rows(i).EntireRow.Delete
          End If
     Next i

    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With

End Sub

1
เป็นการลบแถวที่ทั้งแถวว่างเปล่าหรือไม่ หากทำเช่นนั้นจะคล้ายกับคำตอบ @drnewman คำถามระบุสถานะโดยเฉพาะ: ลบแถวหากเซลล์ในคอลัมน์ใดคอลัมน์หนึ่งว่าง
Davidenko

ยินดีต้อนรับสู่ Super User! โปรดอ่านคำถามอีกครั้งอย่างระมัดระวัง คำตอบของคุณไม่ตอบคำถามเดิม
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.