在Excel VBA中,根据字典值删除Excel中的行

我仍然进入VBA,目前我正在尝试执行以下操作: – 根据存储在字典中的值删除Excel工作表中的行。

我有这个代码:

For Each Key In dict.Keys i = Key Cells.Rows(i).Delete Next 

在那之前我已经填写了字典。 这个想法是“密钥”存储了存储特定值的所有行号,例如“1”。

随着每个我想要删除存储在字典中的所有行,但是一旦你删除Excel中的一行数量的变化。 例如,字典中的第一个存储值是5,因此每个将删除第5行。字典中的第二个值是10,现在当for each尝试删除第10行时,它将删除第10行原来的文件曾经是第11行。基本上每个都不能删除正确的行。

正如我所说,我是VBA的新手,我甚至不确定这是否是正确的方法,或者在这种情况下比词典更好。 我期待听到您的意见和build议。

先谢谢你!

更新:由Ambie和sktneer解决。 检查答案。

我不确定我会不会打扰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 

你可以尝试这样的事情…

 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