首页 > 解决方案 > 如果满足条件vba,如何将范围设置为变量列并删除整行

问题描述

我有一个计数器,可以根据标题名称识别特定列。该计数器是变量“k”并且k=5

现在在我的代码中,我需要它引用该列作为我的范围,以便我可以删除满足特定条件的整行

我有 2 个问题: 1. 我的范围没有设置。我不想硬编码范围列 2。我的循环没有运行

Dim physicalstr As String
physicalstr = "Physical"
Dim physrange As Range
Set physrange = ShtTwo.Columns(k)

For Each cell In physrange
    If ActiveCell.Value = physicalstr _
    Then ActiveCell.EntireRow.Delete
Next cell

标签: excelvbaperformanceoptimization

解决方案


您的代码的直接问题activecell是永远不会分配,永远不会更改并且不会在循环中引用(其中涉及cell)。反正你不需要激活。

删除行或列时,您必须向后循环以避免跳过行。要向后循环,在循环中使用计数器变量比使用范围更容易。

另外,你真的需要遍历所有百万行吗?考虑使用FindorAutofilter以获得更有效的代码。

Dim physicalstr As String
physicalstr = "Physical"
Dim physrange As Range
Set physrange = ShtTwo.Columns(k)
Dim r As Long

For r = physrange.Count To 1 Step -1
    If physrange.Cells(r).Value = physicalstr Then physrange.Cells(r).EntireRow.Delete
Next r

推荐阅读