Excel VBA – 基于标准删除行

我有一个报告,我每天都会以非常夸张的格式来拉。 它包含一个可变的行数,由4列组成非官方的表格,根据每个员工的姓名。

我所拥有的是B列中的员工姓名,前面有2个空白行,后面跟着1个空白行数据。

我想要完成的是循环遍历数据,确定B列<> blank中的单元格,删除该单元格下面的整个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 

不用对你的代码做大的修改,试试这个:

 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)下方的一个单元格中select一个单元格范围,并将其设置为Offset(2)'. Change this range to下方的两个单元格Offset(2)'. Change this range to Offset(2)'. Change this range to ENTIREROW`,然后删除。

然后selectOffset(-1)以上的单元格,selectENTIREROW并删除。

根据您的问题叙述,您可能需要删除列“B”中具有空白单元格的所有行

应该是这个问题比你可以(免责声明:testing它在复制工作表!)简单地去像这样:

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