过滤掉N / A,以便可以删除N / A和N / A旁边的所有列

时间:2017-11-11 13:26:54

标签: excel vba excel-vba excel-2010

我有一组数据,我们需要删除表格的#N/A以显示准确的数据。请注意,我想删除列的一侧,而不仅删除N / A以使数据看起来更整洁。

我的代码在设定范围之间创建了一个过滤器,但我想删除第一列中的#N/A

相反,它只是将#N/A放在第一列而不是删除它。

  sht1.ListObjects.Add(xlSrcRange, , xlYes).Name = _
        "Table1"
    sht1.ListObjects("Table1").Range.AutoFilter Field:=9, Criteria1:= _
        ">=-1000000000000", Operator:=xlAnd, Criteria2:="<=1000000000000000"
    sht1.Range("Table1[#All]").Select
    ''sht1.ListObjects("Table1").Range.AutoFilter Field:=1, Criteria1:="=#N/A"

我试过了:

wb1.ListObjects("Table1").Range.AutoFilter Field:=1, Criteria1:="=#N/A" 

以及其他尚未对我有用的变体。

以下情况往往会起作用,但在我的情况下这完全没用,因为我的数据非常动态且不断变化。

值得注意的是,这不适用于N / A,但是我还没有让它在动态范围内工作。

    ActiveSheet.ListObjects("Table2").Range.AutoFilter Field:=1, Criteria1:= _ 
    Array("Nov 13", "Nov 13", "Today", _ 
‘’etc,,
    ), Operator:= _ 
    xlFilterValues 
End Sub 
ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:="#N/A" 

imgur.com/a/TqwDz

2 个答案:

答案 0 :(得分:1)

您有一个将日期转换为三个值之一的公式: -

  • Today
  • Tomorrow
  • 任何未来日期

您看到#N/A,因为该值不适合这三个选项之一。可能的原因: -

  • 日期字段为空
  • 日期已过去
  • 日期是将来的

在评论中显示公式=VLOOKUP(Q139,B$2:C$40000,1,0),我将在此处采取一个大的假设并假设如下: -

  • B2是公式=TODAY()
  • B3到B40000是公式=B2+1(及以后)
  • C2的值为Today
  • C3的值为Tomorrow
  • C4至C40000是=B4(及以后)的公式

它基本上是对这三个值之一的日期查找。

这会导致这个问题,如果我正确的话(我没有进入聊天室),这将是一个令人惊讶的消除和扣除过程。

现在 IF 以上是真的我建议如下,将原始公式=VLOOKUP(Q139,B$2:C$40000,1,0)更改为=IF(Q139=TODAY(),"Today",IF(Q139=TODAY()+1,"Tomorrow",IF(Q139>TODAY(),Q139,"Discount")))

这个新公式表明: -

  • 如果Q139等于今天,请输出Today
  • 如果Q139等于今天+ 1,则输出Tomorrow
  • 如果Q139大于今天,请输出Q139
  • 其他输出&#39;折扣&#39;

然后您可以按Discount过滤。

这是否有效,我是否接近?

答案 1 :(得分:1)

这是一个可以达到预期效果的简单例程。

Sub test2()
Dim c As Range

For Each c In ActiveSheet.UsedRange
   If IsError(c) Then
     Rows(c.Row).EntireRow.Delete
   End If
Next c
End Sub