好的,所以我有一张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
答案 0 :(得分:2)
这是因为你继续测试同一行并删除上面的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
答案 1 :(得分:0)
尝试撤消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