Excel Vba到基于多列的自动筛选

Excel Vba到基于多列的自动筛选,excel,vba,autofilter,select-case,Excel,Vba,Autofilter,Select Case,我正在做一个项目,我需要你的帮助 我需要Vba代码自动过滤和计数基于多列的项目 比如说 我有 所以结果应该是 如此类推,适用于所有范围 我尝试了自动筛选,然后选择填充数据的案例代码 工作了,但只是为了另一个视角,而不是我想要的视角 选择案例的结果如下所示 感谢您的支持,请按此模式获取过滤后的数据 由于您的预期结果令人困惑(如果与图片中的数据进行比较),我不太确定您预期的结果是什么 不管怎样,下面是一段惰性代码,它根据与图片中类似的数据创建一个透视表。之后,它只是一个复制粘贴过程 它假设您的

我正在做一个项目,我需要你的帮助

我需要Vba代码自动过滤和计数基于多列的项目

比如说 我有

所以结果应该是

如此类推,适用于所有范围

我尝试了自动筛选,然后选择填充数据的案例代码 工作了,但只是为了另一个视角,而不是我想要的视角 选择案例的结果如下所示

感谢您的支持,请按此模式获取过滤后的数据


由于您的预期结果令人困惑(如果与图片中的数据进行比较),我不太确定您预期的结果是什么

不管怎样,下面是一段惰性代码,它根据与图片中类似的数据创建一个透视表。之后,它只是一个复制粘贴过程

它假设您的数据在表1中,
从带有六列标题的单元格A1开始(单元格A1到F1),
第F列后面的左边什么也没有。

Sub test()
Set sh = Sheets("Sheet1")
Set shResult = Sheets("Sheet2")
sh.Range("G:Z").Delete

With sh
Range("C1").Value = "BLANK"
Set rg = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
rg.Offset(0, 6).Value = 1
rg.Resize(rg.Rows.Count, 7).Name = "data"
End With

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "data", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:=sh.Range("P1"), TableName:="ptTmp", DefaultVersion _
        :=xlPivotTableVersion14
        
    With sh.PivotTables("ptTmp").PivotFields("SKU Name")
        .Orientation = xlRowField
        .Position = 1
        .Subtotals = Array _
        (False, False, False, False, False, False, False, False, False, False, False, False)
    End With
    
    With sh.PivotTables("ptTmp").PivotFields("Supplier")
        .Orientation = xlRowField
        .Position = 2
        .Subtotals = Array _
        (False, False, False, False, False, False, False, False, False, False, False, False)
    End With
    
    With sh.PivotTables("ptTmp").PivotFields("Inventory Item Status")
        .Orientation = xlRowField
        .Position = 3
        .Subtotals = Array _
        (False, False, False, False, False, False, False, False, False, False, False, False)
    End With
    
    With sh.PivotTables("ptTmp").PivotFields("Flag")
        .Orientation = xlRowField
        .Position = 4
        .Subtotals = Array _
        (False, False, False, False, False, False, False, False, False, False, False, False)
    End With
    
    With sh.PivotTables("ptTmp").PivotFields("FLAG")
        .PivotItems("Used").Visible = False
        .PivotItems("Bad").Visible = False
    End With
    
    With sh.PivotTables("ptTmp")
    .AddDataField ActiveSheet.PivotTables("ptTmp"). _
        PivotFields("1"), "COUNT", xlCount
    .RowAxisLayout xlTabularRow
    .RepeatAllLabels xlRepeatLabels
    .ColumnGrand = False
    .ShowTableStyleRowHeaders = False
    .TableRange1.Copy
    End With

    shResult.Range("A1").PasteSpecial Paste:=xlPasteValues
    shResult.Range("A1").PasteSpecial Paste:=xlPasteFormats
    
        With sh.PivotTables("ptTmp")
            With .PivotFields("FLAG")
            .ClearAllFilters
            .PivotItems("New").Visible = False
            .PivotItems("Bad").Visible = False
            End With
            With .PivotFields("SKU Name")
            Range(.DataRange, .DataRange.Offset(0, 4)).Copy
            End With
        End With
    
    shResult.Range("A" & Rows.Count).End(xlUp).Offset(2, 0).PasteSpecial Paste:=xlPasteValues
    
        With sh.PivotTables("ptTmp")
            With .PivotFields("FLAG")
            .ClearAllFilters
            .PivotItems("New").Visible = False
            .PivotItems("Used").Visible = False
            End With
            With .PivotFields("SKU Name")
            Range(.DataRange, .DataRange.Offset(0, 4)).Copy
            End With
        End With

    shResult.Range("A" & Rows.Count).End(xlUp).Offset(2, 0).PasteSpecial Paste:=xlPasteValues
    
    sh.Range("G:Z").Delete
    shResult.Activate
    shResult.Range("A1").Select
End Sub

请将您的问题创建一个。看起来只有您理解这个问题…这看起来更像是一个透视表,而不是我所描述的任何过滤器…请在您期望的结果的最后一行提供此代码的任何帮助,您认为项目状态可用、使用了标志但计数为零是什么意思?在所有供应商都是华为的情况下,您是如何使用四个DG8045标志的,而在您的数据中,有一个是华为供应商使用的DG8045,三个是TP link供应商使用的DG8045?亲爱的Karma,非常感谢您的帮助,因为这正是我需要的,非常感谢您的支持,但我还有两个问题,请回答1。如何将结果复制到同一工作簿的其他工作表2。如果我需要为ex:bad添加额外的标志类型,我尝试使用sh.PivotTables(“ptTmp”).PivotFields(“flag”).pivottItems(“bad”).Visible=False结束,但我得到的视图就像我需要的那样@MostafaNabil,请查看代码。我已修改,因此结果将放在表2中。(请确保您的工作簿有标签页2)。再次感谢您!没有任何语言可以描述我是如何感谢您的支持的,是的,它起作用了。我面临的唯一问题是不,当我在同一工作簿的另一张工作表上创建按钮来调用此函数时,它在打开并激活源工作表本身之前不起作用@MostafaNabil,很高兴我能帮上忙。很抱歉,我在代码上错了一行。请将
AddDataField ActiveSheet.PivotTables(“ptTmp”)
行更改为
AddDataField sh.PivotTables(“ptTmp”)
。现在您可以使用按钮调用Sheet2上的宏。不要忘记将代码放在常规模块中,而不是放在工作表模块中。