Excel 从另一个文本等于#N/a的工作表中删除一行
我已经为用户构建了一系列VBA宏来完成一些步骤。我构建了一个按钮,用户可以单击该按钮删除任何包含#N/a的行。我前面的一个步骤将其设置为纯文本值 执行该操作时,它看起来像是在运行,但只是将我的视图移动到我试图清理的工作表中,实际上并没有删除任何行 我尝试过切换部分代码,而不是=以喜欢Excel 从另一个文本等于#N/a的工作表中删除一行,excel,vba,Excel,Vba,我已经为用户构建了一系列VBA宏来完成一些步骤。我构建了一个按钮,用户可以单击该按钮删除任何包含#N/a的行。我前面的一个步骤将其设置为纯文本值 执行该操作时,它看起来像是在运行,但只是将我的视图移动到我试图清理的工作表中,实际上并没有删除任何行 我尝试过切换部分代码,而不是=以喜欢 Sub DeleteNAsOnFrank_Click() Dim Firstrow As Long Dim Lastrow As Long Dim Lrow As Long Dim CalcMode As Long
Sub DeleteNAsOnFrank_Click()
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Dim CalcMode As Long
Dim ViewMode As Long
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
With Sheets("Frank Import Full List")
.Select
ViewMode = ActiveWindow.View
ActiveWindow.View = xlNormalView
.DisplayPageBreaks = False
Firstrow = .UsedRange.Cells(1).Row
Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
For Lrow = Lastrow To Firstrow Step -1
With .Cells(Lrow, "A")
If Not IsError(.Value) Then
If .Value = "#N/A" Then .EntireRow.Delete
End If
End With
Next Lrow
End With
ActiveWindow.View = ViewMode
With Application
.ScreenUpdating = True
.Calculation = CalcMode
End With
End Sub
我希望它删除工作表(“Frank Import Full List”)上包含文本If.Value=“#N/A”Then.EntireRow.delete
”
的任何行
'Code...
For Lrow = Lastrow To Firstrow Step -1
If Application.WorksheetFunction.IsNA(.Cells(Lrow, "A")) Then .Rows(Lrow).EntireRow.Delete
Next Lrow
'Code...
试试下面的方法
'Code...
For Lrow = Lastrow To Firstrow Step -1
If Application.WorksheetFunction.IsNA(.Cells(Lrow, "A")) Then .Rows(Lrow).EntireRow.Delete
Next Lrow
'Code...
将代码更改为
With .Cells(Lrow, "A")
If IsError(.Value) Then .EntireRow.Delete
End With
但是,我建议使用更好的方法删除这些单元格。使用自动筛选,而不是循环和删除您的代码将更快。也可以代替usedrange。使用实际范围。用于查找最后一行并使用该范围
Dim ws As Worksheet
Dim delRange As Range
Dim lRow As Long
Set ws = ThisWorkbook.Sheets("Frank Import Full List")
With ws
.AutoFilterMode = False
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
With .Range("A1:A" & lRow)
.AutoFilter Field:=1, Criteria1:="#N/A"
Set delRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
If Not delRange Is Nothing Then delRange.Delete
.AutoFilterMode = False
End With
在行动中
将代码更改为
With .Cells(Lrow, "A")
If IsError(.Value) Then .EntireRow.Delete
End With
但是,我建议使用更好的方法删除这些单元格。使用自动筛选,而不是循环和删除您的代码将更快。也可以代替usedrange。使用实际范围。用于查找最后一行并使用该范围
Dim ws As Worksheet
Dim delRange As Range
Dim lRow As Long
Set ws = ThisWorkbook.Sheets("Frank Import Full List")
With ws
.AutoFilterMode = False
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
With .Range("A1:A" & lRow)
.AutoFilter Field:=1, Criteria1:="#N/A"
Set delRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
If Not delRange Is Nothing Then delRange.Delete
.AutoFilterMode = False
End With
在行动中
您知道,您可以使用Autofilter一次性删除所有这些行,而不是循环和删除<代码>工作表(“Frank Import Full List”)。范围(“A1:A”&Lastrow)。自动筛选字段:=1,标准1:=“#N/A”,用于查找最后一行。您没有删除,因为您的
If not iError(.Value)
正在跳闸,因为N/A
是一个错误。删除该测试,它应该可以工作。您知道,您可以使用Autofilter一次性删除所有这些行,而不是循环和删除<代码>工作表(“Frank Import Full List”)。范围(“A1:A”&Lastrow)。自动筛选字段:=1,标准1:=“#N/A”,用于查找最后一行。您没有删除,因为您的If not iError(.Value)
正在跳闸,因为N/A
是一个错误。删除该测试,它应该可以工作。使用自动筛选(您的方法)与将范围传递到数组并循环通过该数组的速度相比有多快?最好是自己尝试并找到它:)顺便说一句,在这种情况下,不建议使用数组,因为您必须处理2个操作。清除数组行,转置后,注意空格。您可以处理数组本身中的行,但仍然是“2个操作”。正确。我得亲自去测试看看。顺便说一句,无论是数组还是自动筛选,它们都比在循环中删除行要好:D。使用循环删除行还有一种方法。它被称为联合方法,一旦循环结束,你就可以删除它。哦,我同意所有列出的方法都比我建议的好。。。但它是有效的;)使用自动筛选(您的方法)与将范围传递到数组并循环通过该数组的速度相比有多快?最好是自己尝试并找到它:)顺便说一句,在这种情况下不建议使用数组,因为您将必须处理2个操作。清除数组行,转置后,注意空格。您可以处理数组本身中的行,但仍然是“2个操作”。正确。我得亲自去测试看看。顺便说一句,无论是数组还是自动筛选,它们都比在循环中删除行要好:D。使用循环删除行还有一种方法。它被称为联合方法,一旦循环结束,你就可以删除它。哦,我同意所有列出的方法都比我建议的好。。。但它是有效的;)