【问题标题】:Trying to Delete Rows with False Value in my Range [duplicate]尝试在我的范围内删除具有错误值的行[重复]
【发布时间】:2020-09-29 13:22:40
【问题描述】:

我很确定我快到了。目前这会删除所有行。 我只是希望它删除标识为其中包含单词FALSE 的行。

Dim R As Range
Dim myRange As Range

LastRow = Range("A" & Rows.Count).End(xlUp).Row

Set myRange = Range("U2:U" & LastRow)

For Each R In myRange
    If R.Value = "FALSE" Then
        Rows.Delete
    End If
Next

我也尝试过使用下面的代码,但没有帮助。

Dim R As Range
Dim myRange As Range

LastRow = Range("A" & Rows.Count).End(xlUp).Row

Set myRange = Range("U2:U" & LastRow)

For Each R In myRange
    If R = "False" Then
        R.EntireRow.Delete
    End If
Next```

这是值存储方式的屏幕截图。 这是一个从 Vlookup 中剥离并转换为值的字段。

【问题讨论】:

  • 这能回答你的问题吗? Clear Cell Contents of range if Contes = 0
  • 不,它没有。我将添加到原始帖子中,以及我尝试过的内容。对不起。
  • 这个回答吗? Delete row based on partial text 无需循环。您可以使用Autofilter 1 次删除相关行。
  • BTW 如何将“False”存储在单元格中?作为字符串还是布尔值?也许您可以添加屏幕截图?
  • @SiddharthRout 图片已添加。是字符串吗?

标签: excel vba


【解决方案1】:

使用False 可能会很棘手,因此我为您创建了一个示例,如下所示。

正如我在 cmets 中推荐的那样,不要使用循环。使用Autofilter 中提到的Delete row based on partial text

试试这个

代码:

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim SearchValue As Boolean
    Dim lRow As Long

    SearchValue = False
    
    '~~> Change this to the relevant sheet
    Set ws = Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Remove any filters
        .AutoFilterMode = False

        '~~> Filter, offset(to exclude headers) and delete visible rows
        With .Range("U1:U" & lRow)
          .AutoFilter Field:=1, Criteria1:=SearchValue
          .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With

        '~~> Remove any filters
        .AutoFilterMode = False
    End With
End Sub

最终结果:

注意:

如果这对您有用,我将把这个问题作为重复的问题结束,但保留这个答案,因为它显示了如何处理布尔值和布尔值(存储为字符串)。

【讨论】:

  • 我很欣赏这种方法,因为这比其他人的回答要快。
  • @Siddharth 太棒了——这有效!非常感谢您的宝贵时间!
【解决方案2】:

试试这个:

Sub DeleteRow()

    Dim LastRow As Long, cell As Range
    LastRow = ThisWorkbook.ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    For Each cell In ThisWorkbook.ActiveSheet.Range("U2:U" & LastRow)
        If cell.Value = "False" Then
        cell.EntireRow.Delete
        End If
    Next

End Sub

注意:ThisWorkbook.ActiveSheet 不是必须的,最好给出适当的参考。

【讨论】:

  • 对不起@Amit 这也不起作用。
  • 如果您与虚拟数据共享您的 Excel 文件,我会尽力而为。
  • 或者您也可以尝试将“False”替换为“FALSE”或 False。
  • @Amit 您的答案将失败,因为您需要在删除行时从下到上循环。删除行后,底部的行向上移动。
  • @Harun24HR 对不起,我忘记了。
【解决方案3】:

试试下面的sub。

Sub RemoveWithFalse()
Dim rng As Range, rws As Long, i As Long
Dim LastRow As Long

  LastRow = Cells(Rows.Count, "U").End(xlUp).Row
  Set rng = ActiveSheet.Range("U1:U" & LastRow)
  rws = rng.Rows.Count
  
  For i = rws To 1 Step (-1)
    If rng.Rows(i) = False Then rng.Rows(i).EntireRow.Delete
  Next
  
  Set rng = Nothing
  
End Sub

如果Column U 的格式为Text,则使用下面的行

If rng.Rows(i) = "FALSE" Then rng.Rows(i).EntireRow.Delete

【讨论】:

  • 这很接近,但删除了所有包含 FALSE 的行。更改为文本格式也不起作用。
  • 那么你需要使用最底线。
猜你喜欢
  • 1970-01-01
  • 2011-07-22
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
相关资源
最近更新 更多