我正在尝试拼凑代码以使我的宏正常工作。这种方法在过去很好用,但我似乎无法正确调整任何代码。
我找到了以下
Sub way()
Dim Cell As Range
For Each Cell In Range("A1").CurrentRegion
If Len(Cell) < 2 Then Cell.EntireRow.Delete
Next Cell
End Sub
我可以根据自己的喜好调整If Len(Cell)标准。例如= 10
我不知道如何调整代码以使其搜索A列中的所有单元格并删除相应的行。上面的代码仅适用于A1。
理想情况下,我想删除A列中单元格长度为10个字符的所有行。或者,使用完全不同的代码集,删除不包含A列中长度为10个字符的单元格的所有其他行。
答案 0 :(得分:3)
删除行时,最好向后循环:
Sub way()
Dim ws As Worksheet
Dim i As Long
Dim lastrow As Long
Set ws = ActiveSheet
lastrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
For i = lastrow To 1 Step -1
If Len(ws.Cells(i, 1)) < 2 Then ws.Rows(i).Delete
Next i
End Sub
答案 1 :(得分:3)
基本上,你的循环遍历从{A1}辐射出的Range.CurrentRegion property中的每个单元格。您的叙述表示您只想检查A列但删除Range.EntireRow property。
由Scott Craner提出的For .. Next向后循环可能是你最好的选择,但如果你对For ... Each In循环感觉更舒服,那么你的调整就可以了。
Sub way()
Dim cl As Range, dels As Range
With Worksheets("Sheet1")
For Each cl In .Range("A1").CurrentRegion.Columns(1).Cells
If Len(cl.Value2) = 10 Then
If Not dels Is Nothing Then
Set dels = Union(dels, cl)
Else
Set dels = cl
End If
End If
Next cl
End With
If Not dels Is Nothing Then _
dels.EntireRow.Delete
End Sub
删除A列中没有值为10个字符,符号或数字长的行的逻辑将为If Len(cl.Value2) <> 10 Then
。
答案 2 :(得分:-2)
我没有检查语法,但是这样的事情应该有效:
dim idx as integer
idx = 1
while Range("A" + cstr(idx)).value <> ""
'insert your delete logic here...
idx = idx + 1
wend