我仍然进入VBA,目前我正在尝试执行以下操作: - 根据存储在字典中的值删除Excel工作表中的行。
我有这段代码:
For Each Key In dict.Keys
i = Key
Cells.Rows(i).Delete
Next
之前我填写了字典。这个想法是"键"存储存储特定值的所有行号,例如" 1"。
使用for each我想删除存储在字典中的所有行,但是一旦删除Excel中的行,数字就会改变。例如,字典中的第一个存储值是5,因此每个将删除第5行。字典中的第二个值是10,现在当每个试图删除第10行时,它删除第10行,它在原始文件曾经是第11行。基本上每个都无法删除正确的行。
正如我所说,我是VBA的新手,我甚至不确定这是否是正确的方法,或者在这种情况下有比词典更好的东西。我期待着听到您的想法和建议。
提前谢谢!
更新:由Ambie和sktneer解决。检查答案。
答案 0 :(得分:2)
您可以尝试这样的事情......
Dim rng As Range
Dim it
For Each it In dict.keys
If rng Is Nothing Then
Set rng = Range("A" & it)
Else
Set rng = Union(rng, Range("A" & it))
End If
Next it
If Not rng Is Nothing Then
rng.EntireRow.Delete
End If
End Sub
答案 1 :(得分:1)
我不确定我是否会对Dictionary
感到烦恼。毕竟,Range
是一个集合,所以可能只考虑将所有目标行放入一个范围内并在该范围内运行“批量”删除。它比通过循环行删除要快得多:
Dim delRng As Range, srcRng As Range, cell As Range
'Loop through the range containing your criterion test
With Sheet1
Set srcRng = .Range(.Cells(1, "A"), .Cells(.Rows.Count, "A").End(xlUp))
End With
For Each cell In srcRng.Cells
If cell.Value2 = 1 Then 'change to your criterion
'It's a hit so add the cell to our delete range
If delRng Is Nothing Then
Set delRng = cell
Else
Set delRng = Union(delRng, cell)
End If
End If
Next
'Delete the rows
If Not delRng Is Nothing Then delRng.EntireRow.Delete