如何根据单元格值删除行

时间:2013-01-30 20:56:26

标签: excel vba excel-vba

我有一张工作表,我需要根据单元格值删除行。

要检查的单元格在A列中。

如果单元格包含“ - ”..删除行

我找不到这样做的方法..我打开一个工作簿,将所有内容复制到另一个工作簿,然后删除整个行和列,但是有一些特定的行必须根据单元格值删除。< / p>

需要帮助。

更新

我拥有的数据样本

Sample

7 个答案:

答案 0 :(得分:18)

最简单的方法是使用filter

您可以过滤A列中没有“ - ”的任何单元格,复制/粘贴,或者(我更优选的方法)过滤所有具有“ - ”的单元格,然后选择全部删除 - 删除过滤器后,您将得到所需的内容。

希望这有帮助。

答案 1 :(得分:13)

屏幕截图非常有用 - 以下代码将完成这项工作(假设数据位于A1列的A列中):

Sub RemoveRows()

Dim i As Long

i = 1

Do While i <= ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Rows.Count

    If InStr(1, ThisWorkbook.ActiveSheet.Cells(i, 1).Text, "-", vbTextCompare) > 0 Then
        ThisWorkbook.ActiveSheet.Cells(i, 1).EntireRow.Delete
    Else
        i = i + 1
    End If

Loop

End Sub

共享示例文件:https://www.dropbox.com/s/2vhq6vw7ov7ssya/RemoweDashRows.xlsm

答案 2 :(得分:9)

您可以在新列中复制如下公式......

=IF(ISNUMBER(FIND("-",A1)),1,0)

...然后对该列进行排序,突出显示值为1的所有行并删除它们。

答案 3 :(得分:4)

如果要根据某些特定的单元格值删除行。 假设我们有一个包含10000行的文件和一个值为NULL的字段。 并基于该空值想要删除所有这些行和记录。

这里有一些简单的提示。 首先打开“查找替换”对话框,然后在“替换”选项卡上,将所有包含NULL值的单元格设置为空白。 然后按F5并选择空白选项,现在右键单击活动工作表,然后选择删除,然后选择整行。

它将根据包含单词NULL的单元格值删除所有这些行。

答案 4 :(得分:4)

如果您提交的文件不是太大,您可以随时按 - 列进行排序,一旦他们全部一起突出显示并删除。然后重新排序回到你想要的东西。

答案 5 :(得分:1)

您可以遍历范围内的每个单元格,并使用InStr函数检查单元格是否包含字符串,在您的情况下;连字符。

Sub DeleteRowsWithHyphen()

    Dim rng As Range

    For Each rng In Range("A2:A10") 'Range of values to loop through

        If InStr(1, rng.Value, "-") > 0 Then 'InStr returns an integer of the position, if above 0 - It contains the string
            rng.Delete
        End If

    Next rng

End Sub

答案 6 :(得分:1)

这是autofilter宏,你可以将函数作为基础:

Selection.AutoFilter
ActiveSheet.Range("$A$1:$A$10").AutoFilter Field:=1, Criteria1:="=*-*", Operator:=xlAnd
Selection.AutoFilter

我使用此自动过滤功能删除匹配的行:

Public Sub FindDelete(sCol As String, vSearch As Variant)
'Simple find and Delete
Dim lLastRow As Integer
Dim rng As Range
Dim rngDelete As Range
    Range(sCol & 1).Select
    [2:2].Insert
    Range(sCol & 2) = "temp"
    With ActiveSheet
        .usedrange
            lLastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
        Set rng = Range(sCol & 2, Cells(lLastRow, sCol))
            rng.AutoFilter Field:=1, Criteria1:=vSearch, Operator:=xlAnd
        Set rngDelete = rng.SpecialCells(xlCellTypeVisible)
            rng.AutoFilter
            rngDelete.EntireRow.Delete
        .usedrange
    End With
End Sub

称之为:

call FindDelete "A", "=*-*"

它为我节省了大量的工作。祝你好运!