VBA如果单元格不等于值,则删除

时间:2018-07-18 21:05:59

标签: excel vba excel-vba if-statement

我是VBA的新手,我似乎无法通过Google弄清楚这一点。

我正在尝试遍历工作表,并使用If语句根据第1行的值删除不必要的列。我正在尝试这样做:

    Sub Macro1
    Dim cell As Range
    For Each cell In Rows("1")
    If cell.Value <>  "order_number", "tax_details", "etc"
    Then .EntireColumn.delete
    End Sub

但是我似乎无法弄清楚如何将“ If cell.Value”语句与多个值一起使用,也无法弄清楚如何删除不需要的列。任何帮助深表感谢。

干杯

Justin

编辑:感谢所有答复人员,一切都超级有帮助。解决了这个问题,我学到了很多东西。

4 个答案:

答案 0 :(得分:2)

您很近。

  1. 您的For循环必须以Next语句
  2. 结尾
  3. 您的Then必须与您的If出现在同一行,并且必须用End If关闭(除非您使用单线)
  4. 您必须使用AND分开测试条件
  5. Cell在这里已经是关键字(Range的子类),因此请将该变量更改为rngCell或其他名称。
  6. Rows("1")最好作为显式范围,否则它将逐字遍历该行中的每一列。有很多专栏。

Sub Macro1
    Dim rngCell As Range
    For Each rngCell In Range("A1:GZ1").Cells
        If rngCell.Value <>  "order_number" And rngCell.Value <>  "tax_details" AND rngCell.Value <> "etc" Then 
             rngCell.EntireColumn.delete
        End If
    Next cell
End Sub

答案 1 :(得分:1)

似乎没有其他响应可以解决删除列时从左到右循环的事实。从下到上删除行,从右到左删除列,否则您可能会跳过单元格/列。

Sub Macro1
    Dim i as long

    with worksheets("sheet1")
        For i=.cells(1, .columns.count).end(xltoleft).column to 1 step-1
            select case lcase(.cells(1, i).value)
                case "order_number", "tax_details", "etc"
                    'do nothing
                case else
                    .columns(i).entirecolumn.delete
            end select
        next i
    end with
End Sub

答案 2 :(得分:0)

您必须每次都进行比较/评估。

If cell.Value <> "order_number" And cell.Value <> "tax_details" And cell.Value <> "etc"

答案 3 :(得分:0)

为了测试多个条件,您可以使用逻辑运算符(AND,OR,NOT等)来创建单个逻辑语句(即,所有3个语句都具有一个值)。如果您希望任何条件都可以使用,请使用“或”,如果您需要同时满足所有3个条件,请使用AND。

If cell.Value <>  "order_number", "tax_details", "etc"

应该是

If cell.Value <> "order_number" OR cell.value <> "tax_details"  OR cell.value <> "etc" then

要以这种方式删除整个列,您需要引用要删除的列。如果要遍历行,则可以通过

进行访问
Cell.EntireColumn.delete