【发布时间】:2015-11-13 07:58:29
【问题描述】:
这是 Windows 7 上的 Excel 2010。
我收到电子表格,其中一列称为“已批准”。此列用 x 和空白填充。我想删除该列中所有有空格的行。这是一个简单的问题,但有两个令人困惑的问题:
- Approved 列的位置发生了变化,所以我不能只做 Columns("R").SpecialCells(xlBlanks).EntireRow.Delete。我尝试通过在 A1:Z5 中搜索“批准”(因为总是少于 26 行)并选择找到它的列来解决这个问题。
- 大部分数据是从上个月的文档中提取的,因此一些“空白”单元格填充了 vlookup。我尝试通过首先选择所有数据并粘贴为值来解决此问题。
这是当前代码:
Sub DeleteCol()
Range("A1").Select
Range(Selection, Selection.SpecialCells(xlLastCell)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Dim rngApprove As Range
Set rngApprove = Range("A1:Z5").Find("Approve")
If rngApprove Is Nothing Then
MsgBox "Approved column was not found."
Exit Sub
End If
Dim approved_column As Range
Set approved_column = rngApprove.EntireColumn
approved_column.SpecialCells(xlBlanks).EntireRow.Delete
End Sub
复制 + 粘贴作为值按预期工作。但是,行删除只会删除第 1-4 行,并且只保留第 5 行以下的所有内容,即使其中一些单元格是空白的。如果我用
替换最后一行approved_column.select
它应该选择整个列。这让我相信问题出在我的删除方法上。
【问题讨论】:
-
不确定放弃的紧迫性或您是否愿意放弃,但是...您始终可以创建一个循环,遍历每一行,一次删除一个。我从来没有使用过你的那个命令,如果你多次运行它有什么作用吗?也许它有 4 整行或其他东西的奇怪限制......
-
我怀疑这与作为值复制和粘贴时有关,即使公式的输出长度为 0,它仍然不被 excel 视为
EMPTY。您可能必须添加一个循环,在您的“已批准”列范围内循环,如果输出为 =“”(不同则为空),您可以将其附加到一个范围。循环完成后,您可以让 VBA 一口气删除该范围内的所有行。干杯 -
您不应该在
A1:Z1中搜索“批准”吗?查看其他 4 行有什么意义?