我有一张包含公式的电子表格,我写了一个vb代码来评估粘贴。
根据输入文件填充的行数变化,我需要删除具有公式的行,现在为空。 (这是用作连接器,否则它是如何选择这些额外的行是不必要的)
Sheet2.Range("G2:G298").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
以上代码没有做任何事......
答案 0 :(得分:0)
如果空白是如下公式的结果:
=""
输入一个单元格,然后复制并粘贴为值,这些不是真正的空白单元格
相反,这些是看起来空白但包含zero length
字符串的单元格
SpecialCells(xlCellTypeBlanks)
甚至Excel公式ISBLANK
也无效。{
一种方法是遍历范围并检查包含""
的所有内容并将其删除。
Dim c As Range, rngtodelete As Range
For Each c In Sheet2.Range("G2:G298")
If Len(c.Value) = 0 Then
If rngtodelete Is Nothing Then Set rngtodelete = c _
Else Set rngtodelete = Union(rngtodelete, c)
End If
Next
If Not rngtodelete Is Nothing Then rngtodelete.EntireRow.Delete xlUp
另一种方法是使用AutoFilter
这样:
Sheet2.Range("G2:G298").AutoFilter 1, "="
Sheet2.Range("G2:G298").SpecialCells(xlCellTypeVisible).EntireRow.Delete xlUp
我假设G2
不包含您的标题,而是数据的开头
如果它恰好是您的标题,则删除时需要使用偏移量。
Sheet2.Range("G2:G298").Offset(1, 0) _
.SpecialCells(xlCellTypeVisible).EntireRow.Delete xlUp
Sheet2.AutoFilterMode = False
答案 1 :(得分:0)
我不完全确定你的意思"这是用作连接器" ,但我认为它与导出/导入过程有关应用
如上所述,零长度字符串与真正的空白单元格不同。但是,您可以轻松地删除它们的工作表。我所知道的最快的方法是快速循环遍历所有列,应用文本到列►固定宽度►完成每个。
完成后,零长度字符串将恢复为真正空白的单元格,但工作表的使用范围仍将与数据集底部的空单元格重叠。这意味着对外部程序的任何导出都将尝试导出这些单元格。只需运行.UsedRange
即可让Excel重新评估实际使用的范围。
首先,点击 Ctrl + 结束,查看Excel 认为是工作表中最后使用的单元格。接下来,运行以下宏。
Sub prep_for_export()
Dim c As Long
Debug.Print Sheets("Sheet1").UsedRange.Address(0, 0)
With Sheets("Sheet1")
For c = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
.Columns(c).TextToColumns Destination:=.Cells(1, c), _
DataType:=xlFixedWidth, FieldInfo:=Array(0, 1)
Next c
End With
Sheets("Sheet1").UsedRange
Debug.Print Sheets("Sheet1").UsedRange.Address(0, 0)
End Sub
如果必须在运行之前在所有四个地方编辑 Sheet1 。
这有点同质但我认为它应该适用于您的目的。运行宏后,再次点击工作表中的 Ctrl + 结束,查看Excel认为工作表中最后使用的单元格。之前和之后的范围地址也被记录到VBE的立即窗口。