Advanced.Filter VBA
我有这个代码到目前为止,只是它为工作表2,我怎么能改变这个代码,包括多张表? 在这里完成newb。 :
Sub extractuniquevalues() Sheet1.Range("C:C").AdvancedFilter xlFilterCopy, , Sheet4.Range("C1"), True Sheet2.Range("C:C").AdvancedFilter xlFilterCopy, , Sheet4.Range("C1"), True End Sub
你可以这样做:
过滤数据到位 :
Sub extractuniquevalues() Dim wks As Excel.Worksheet For Each wks In Excel.ActiveWorkbook.Worksheets Call wks.Range("C:C").AdvancedFilter(XlFilterAction.xlFilterInPlace, , , True) Next wks End Sub
筛选数据并将其粘贴到新的工作表中:
Sub extractuniquevalues2() Dim wks As Excel.Worksheet Dim wksSummary As Excel.Worksheet '---------------------------------------------------------------------------------- On Error Resume Next Set wksSummary = Excel.ThisWorkbook.Worksheets("Unique data") On Error GoTo 0 If wksSummary Is Nothing Then Set wksSummary = Excel.ThisWorkbook.Worksheets.Add wksSummary.Name = "Unique data" End If 'Iterate through all the worksheets, but skip [Summary] worksheet. For Each wks In Excel.ActiveWorkbook.Worksheets With wksSummary If wks.Name <> .Name Then If Application.WorksheetFunction.CountA(wks.Range("C:C")) Then Call wks.Range("C:C").AdvancedFilter(xlFilterCopy, , .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1), True) End If End If End With Next wks End Sub
来自每个工作表的唯一数据打印在称为唯一数据的新工作表的第一列中。
此方法分别过滤每个工作表中的数据,因此如果Sheet1中有值A
和Sheet2中有值A
,则结果列表中将有两个条目A
请注意,第一个值被认为是一个头,它可以在结果列表中复制。
我觉得你的意见可以保证我发表这个答案,这样我可以做得更彻底。 这只是为了增加mielk提供的答案!
Excel中的对象层次结构大致可概括为:“一个Excel应用程序拥有工作簿,一个Excel工作簿拥有工作表,一个Excel工作表拥有范围”。 欲了解更多信息,请看这里 。
当你点击一个Excel文件打开它时,你实际上正在做两件事:
- 启动Excel“应用程序”
- 打开一个“应用程序”将“拥有”的工作簿
当您打开后续Excel文件时,Excel将跳过第一步,只需在已经运行的Excel应用程序中打开工作簿。 请注意,这意味着类似于工作簿可以具有多个工作表,单个Excel应用程序可以具有多个属于它的工作簿 。
有多种方法可以在VBA中访问这些工作簿。 一种方法是使用应用程序的Workbooks
成员,就像使用Workbook
的Sheets
成员来访问工作表一样。 虽然你只是想访问用户正在编辑/工作的工作簿。 要做到这一点,您可以使用ActiveWorkbook
,每当用户开始在不同的工作簿上工作时, ActiveWorkbook
会自动更新。
您经常要使用的另一个工作簿是“运行”您正在运行的代码的工作簿。 您可以通过使用ThisWorkbook
来做到这一点。 如果打开VBA编辑器并查看项目查看器,甚至可以看到对ThisWorkbook
的引用! 如果你想要你的代码只更新/改变包含它的工作簿,那么ThisWorkbook
就是要走的路。
举个例子:
假设您有一个macros来循环遍历所有打开的工作簿,并将每个工作簿“拥有”的工作表的数量放入“主”工作簿的某个工作表中。
你可以做这样的事情:
Sub CountThem() Dim wb As Workbook Dim outputCell As Range Dim nextRow As Integer nextRow = 1 For Each wb In Application.Workbooks wb.Activate ThisWorkbook.Sheets("MySheet").Cells(nextRow, 1).Value = ActiveWorkbook.Sheets.Count nextRow = nextRow + 1 Next End Sub
您可以将此代码作为“主”工作簿中的模块。
让我知道如果这清除了你的东西! 🙂