Excel Vba到基于多列的自动筛选
我正在做一个项目,我需要你的帮助 我需要Vba代码自动过滤和计数基于多列的项目 比如说 我有 所以结果应该是 如此类推,适用于所有范围 我尝试了自动筛选,然后选择填充数据的案例代码 工作了,但只是为了另一个视角,而不是我想要的视角 选择案例的结果如下所示 感谢您的支持,请按此模式获取过滤后的数据Excel Vba到基于多列的自动筛选,excel,vba,autofilter,select-case,Excel,Vba,Autofilter,Select Case,我正在做一个项目,我需要你的帮助 我需要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上的宏。不要忘记将代码放在常规模块中,而不是放在工作表模块中。