2016-06-06 259 views
1

我有一份報告,我每天都會以非常誇張的格式提取。它包含一個由4列組成的可變行數,根據每位員工的姓名組織成非官方表格。Excel VBA - 基於條件刪除行

我所擁有的是B列中的員工姓名,前面有2個空白行,後面跟着1個空白行數據。

我想要完成的是循環遍歷數據,識別列B中的單元格<>空白,刪除該單元格下的整個2行,並刪除該單元格上的整個1行。

以下是我到目前爲止。沒有多少:

Sub test() 

Dim currentSht As Worksheet 
Dim startCell As Range 
Dim lastRow As Long 
Dim lastCol As Long 
Dim i as integer 

Set currentSht = ActiveWorkbook.Sheets(1) 

Set startCell = currentSht.Range("A1") 
lastRow = startCell.SpecialCells(xlCellTypeLastCell).Row 
lastCol = startCell.SpecialCells(xlCellTypeLastCell).Column 

For i = lastRow To 1 
    If Cells(i, "B").Value <> "" Then 


End Sub 

回答

1

,而不會對代碼的重大變化,試試這個:

For i = lastRow To 1 Step - 1 
    If Cells(i, "B").Value <> "" Then 
    Range(Cells(i, "B").Offset(1), Cells(i, "B").Offset(2)).EntireRow.Delete 'delete two below 
    Cells(i, "B").Offset(-1).EntireRow.Delete ' delete one above 

你已經得到您的非空白單元格(即Cells(i,"b"))。要引用與您已擁有的單元格有關的範圍,請使用OFFSET

因此,按照這種順序,您可以從單元格Offset(1)以下的單元格中選擇一個單元格範圍,並將這些單元格的單元格的範圍從Offset(2)'. Change this range to ENTIREROW`刪除。

然後您選擇上面的單元格Offset(-1),選擇ENTIREROW並刪除。

+0

我有些困惑通過這行代碼:'範圍(將細胞(4,1).Offset(1),將細胞(4,1).Offset(2)) .EntireRow.Delete'。我選擇的範圍(被抵消)不應該參照單元格(我,「B」)?我不知道你爲什麼使用(4,1)。 –

+0

@AndyG正在使用(4,1)在本地設置的快速樣本中,更改爲(我,「B」),謝謝! – EoinS

+0

您在for循環中遺漏了'Step-1'。 –

0

按你的問題的敘述你可能需要刪除具有空白單元格列「B」

所有行應該說是這個問題比你能(免責聲明:測試它複印紙上! )簡單地去像如下:

Sub test()  
    With ActiveWorkbook.Sheets(1) 
     .Range("A1", .Cells(.Rows.Count, "A").End(xlUp)).Offset(, 1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
    End With 
End Sub