19

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

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

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

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

在这里需要帮助。

更新

我拥有的数据样本

样本

4

7 回答 7

18

最简单的方法是使用过滤器

您可以过滤 A 列中没有“-”的任何单元格并复制/粘贴,或者(我更喜欢的方法)过滤所有有“-”的单元格,然后全选并删除 - 一次你删除过滤器,你就剩下你需要的东西了。

希望这可以帮助。

于 2013-01-30T21:17:27.833 回答
15

屏幕截图非常有用 - 以下代码将完成这项工作(假设数据位于从 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

于 2013-01-30T23:02:38.130 回答
9

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

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

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

于 2013-01-30T21:31:35.910 回答
5

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

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

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

于 2014-02-15T18:03:11.167 回答
4

如果您的文件不是太大,您始终可以按具有-的列进行排序,一旦它们全部放在一起,只需突出显示并删除。然后重新排序回到你想要的。

于 2016-12-01T23:56:32.417 回答
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
于 2013-01-30T22:58:19.050 回答
1

这是您可以基于以下功能的自动过滤器宏:

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", "=*-*"

它为我节省了很多工作。祝你好运!

于 2014-06-03T18:03:58.407 回答