按列过滤表。 (过滤器 - >过滤器 - >数字范围) - >输出新表

时间:2017-10-25 22:22:02

标签: excel vba excel-vba filter

我正在尝试使用VBA按列的值过滤表,然后在工作表上输出一个新表(已过滤),但是新区域。注意我想要单元格引用范围数字。

在下面的假excel表上。我想过滤列'年龄'的范围。即过滤器 - >年龄 - > 1-3之间(细胞参考)。第一个表是原始数据。第二个是我想用VBA输出的内容。

我尝试将下面的代码插入到我想要的输出中。缺少与列本身无关的数据(采用完整列)

下面的原始数据和所需输出的图像 Image

Excel VBA, How to select rows based on data in a column?

Option Explicit
Sub tablefilter()
    Dim lastRow As Long, x As Long
    Dim lasColumn As Long, i = 4 
    Dim CopyRange As Range

    With Sheets("Sheet1")
        lastRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For x = 1 To lastRow
            If Len(Trim(.Range("A" & x).Value)) 1<3 Then
                If CopyRange Is Nothing Then
                    Set CopyRange = .Rows(i)
                Else
                    Set CopyRange = Union(CopyRange, .Rows(x))
                End If
            End If
        Next
        If Not CopyRange Is Nothing Then
            CopyRange.Copy Sheets("Sheet2").Rows(1)
        End If
    End With

1 个答案:

答案 0 :(得分:0)

想出来。这适用于带数字的模型,而不是文本值。我认为代码中存在一些低效率,但确实有效。主要问题是它使用两张纸而不是在同一张纸上创建一个新表。 D2 / D3是单元格引用号,G是列。

Sub MaturityRange()

Dim ws As Worksheet 昏暗的模型作为工作表

设置ws = ThisWorkbook.Sheets(&#34;输出&#34;) Set One = ThisWorkbook.Sheets(&#34; Model&#34;)

如果不是IsEmpty(One.Range(&#34; D2&#34;))而不是IsEmpty(One.Range(&#34; D3&#34;))那么     用ws         .Range(&#34; $ G $ 7:$ G $&#34;&amp; .Range(&#34; G&#34;&amp; Rows.Count).End(xlUp).Row).AutoFilter Field:= 1,_             标准1:=&#34;&GT;&#34; &安培; One.Range(&#34; D2&#34;)。价值,_             运算符:= xlAnd,_             Criteria2:=&#34;&LT;&#34; &安培; One.Range(&#34; D3&#34)。值     结束 结束如果

End Sub