Excel VBA - 需要遍历删除单元格值<> 0 的行上方的整整 3 行



好的,所以我有一个 excel 工作表,它的格式不适合我的目的,我每天都会拉动。默认情况下,数据按以下格式列出(在 Excel 工作表上查看):

x1,y1,z1,i1
  ,  ,z2,i2
  ,  ,z3,i3
****Blank row****
****Blank row****
****Blank row****
x2,y2,z4,i4,
  ,  ,z5,i5,
  ,  ,z6,i6,
^above would represent the last row for demontration purposes, but the real
sheet extends up 1000s of rows

为了以更友好的格式获取数据,我需要一个从最后一行(erow)一直到第3行(数据开始的地方)开始的循环。当它在第 2 列中找到<>到" "的行时,我希望它删除该单元格上方的整个 3 行,因此最终目标是将数据格式化为这样(如在 excel 工作表上查看):

x1,y1,z1,i1
  ,  ,z2,i2
  ,  ,z3,i3
x2,y2,z4,i4
  ,  ,z5,i5
  ,  ,z6,i6

以下是我到目前为止所拥有的。自然,它根本不起作用,否则我不会在这里。它正在删除我的所有数据,直到第 3 行,我不知道为什么。任何想法将不胜感激。

Sub test()
Dim currentSht As Worksheet
Dim erow
Dim i As Integer
Set currentSht = ActiveWorkbook.Sheets(1)
erow = currentSht.Cells(Rows.Count, 3).End(xlUp).Row
For i = erow To 3 Step -3
If currentSht.Cells(i, 1).Value <> " " Then
    currentSht.Range(Cells(i, 1).Offset(-1), Cells(i, 1).Offset(-3)).EntireRow.Delete
End If
Next i
End Sub

这是因为您不断测试同一行并删除上面的 3 行。

假设i是 30,它解析为 true,如第 2 列中的数据。 我们删除它上面的三行,使当前行,第 27 行,然后i迭代 -3,i 是 27,它测试相同的数据,并再次解析相同的数据。

所以我们需要强制i更改行号:

Sub test()
Dim currentSht As Worksheet
Dim erow
Dim i As Integer
Set currentSht = ActiveWorkbook.Sheets(1)
erow = currentSht.Cells(Rows.Count, 3).End(xlUp).Row
For i = erow To 3 Step -1
If Trim(currentSht.Cells(i, 1).Value) <> "" Then
    currentSht.Range(Cells(i, 1).Offset(-1), Cells(i, 1).Offset(-3)).EntireRow.Delete
    i = i - 3
End If
Next i

尝试反转IF

Sub test()
    Dim currentSht As Worksheet
    Dim erow
    Dim i As Integer
    Set currentSht = ActiveWorkbook.Sheets(1)
    erow = currentSht.Cells(Rows.Count, 3).End(xlUp).Row
    For i = erow To 3 Step -3
        If currentSht.Cells(i, 1).Value = "" Then
            currentSht.Range(Cells(i, 1).Offset(-1), Cells(i, 1).Offset(-3)).EntireRow.Delete
        End If
    Next i
End Sub

最新更新