【问题标题】:Delete row if first cell isn't numeric vba Excel如果第一个单元格不是数字 vba Excel,则删除行
【发布时间】:2014-03-20 02:46:24
【问题描述】:

如果第一个单元格不是数字(文本或空白单元格),我将使用以下代码删除一行

Dim LR3 As Long, i3 As Long
With Sheets("Productos")
LR3 = Range("A" & Rows.Count).End(xlUp).Row
For i3 = LR3 To 2 Step -1
    If IsNumeric(Sheets("Productos").Range("A" & i3).Value) Then
    Else
    Rows(i3).Delete
    End If
Next i3
End With

使用 LR3 到 2 是因为第一行是标题行,我不想将其删除。我看不出代码有什么问题,我什至没有错误。你看出什么不对了吗?这可能是一个错误的程序?

【问题讨论】:

  • 我只是在 2010 年大肆宣扬这个,它按预期运行。你怎么了?

标签: vba excel isnumeric


【解决方案1】:

如果单元格为空白,IsNumeric 将返回 true。您可以尝试使用 len,

Dim LR3 As Long, i3 As Long

With Sheets("Productos")
    LR3 = .Range("A" & .Rows.Count).End(xlUp).Row

    For i3 = LR3 To 2 Step -1
        If IsNumeric(.Range("A" & i3).Value) And _
        len(.Range("A" & i3).Value) > 0 Then

        Else
            .Rows(i3).Delete
        End If
    Next i3
End With

【讨论】:

  • + 1 表示没有遗漏空白单元格部分 :) 但是,Rows(i3).Delete 仍然不是完全合格的,如果Sheets("Productos") 不活动,则将无法工作:)
  • 谢谢,我进行了编辑以完全符合条件,并且 With 块更容易看:)
  • @JimmySmith 这很少见。我使用了您的代码,但它没有删除空白或非数字行。这真的很奇怪,因为悉达多完成了这项工作:(
  • 这是需要的资格。奇怪的是它仍然没有删除空白行,因为 len() 应该返回 0。
【解决方案2】:

我怀疑您的代码的问题是Sheets("Productos") 不是活动表。所以Rows(i3).Delete 指的是可能不是Sheets("Productos") 的活动表

注意下面代码中 DOTS 的使用。

试试这个(尝试和测试

Sub Sample()
    Dim LR3 As Long, i3 As Long

    With Sheets("Productos")
        LR3 = .Range("A" & .Rows.Count).End(xlUp).Row

        For i3 = LR3 To 2 Step -1
            If Not IsNumeric(.Range("A" & i3).Value) Then .Rows(i3).Delete
        Next i3
    End With
End Sub

编辑:我错过了空白单元格部分,但感谢 Jimmy 的帖子,我看到了。

修改后的代码

Sub Sample()
    Dim LR3 As Long, i3 As Long

    With Sheets("Productos")
        LR3 = .Range("A" & .Rows.Count).End(xlUp).Row

        For i3 = LR3 To 2 Step -1
            If Not IsNumeric(.Range("A" & i3).Value) Or _
            .Range("A" & i3).Value = "" Then .Rows(i3).Delete
        Next i3
    End With
End Sub

【讨论】:

  • adding a sheet selection wouldn't hurt.. – gbianchi 27 secs ago@gbianchi。你是说Sheets("Productos").Select?如果是,那么您可能想查看THIS
  • @SiddharthRout 有正确的想法。在 VBA 中为 excel 编程时,您永远不想使用 active 或 select,因为它几乎总是会中断。为工作表创建变量。将 ws 作为工作表;设置 ws = ThisWorkbook.Sheets("Productos");
  • @SiddharthRout,完成了这项工作!谢谢
  • @agustin: 很高兴能帮上忙
猜你喜欢
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
相关资源
最近更新 更多