首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Advanced.Filter VBA

Advanced.Filter VBA
EN

Stack Overflow用户
提问于 2015-07-27 13:57:46
回答 2查看 561关注 0票数 1

到目前为止,我有这段代码,仅适用于第2页,我如何修改此代码以将多个工作表包含在其中?这里是完整的新人。:

代码语言:javascript
运行
复制
Sub extractuniquevalues()

    Sheet1.Range("C:C").AdvancedFilter xlFilterCopy, , Sheet4.Range("C1"), True
    Sheet2.Range("C:C").AdvancedFilter xlFilterCopy, , Sheet4.Range("C1"), True

End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-27 14:03:38

你可以这样做:

过滤数据就位

代码语言:javascript
运行
复制
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

过滤数据并将其粘贴到新的工作表:

代码语言:javascript
运行
复制
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

注意,第一个值被认为是一个标头,可以在结果列表中复制它。

票数 4
EN

Stack Overflow用户

发布于 2015-07-27 18:34:58

我觉得你的评论值得我把它作为一个回答,这样我可能会更彻底一些。,这只意味着添加到mielk!提供的答案中

excel中的对象层次结构大致概括为“Excel应用程序拥有工作簿,Excel工作簿拥有工作表,Excel工作表拥有范围”。有关该信息的更多信息,请访问这里

当您单击excel文件来打开它时,您实际上做了两件事:

  1. 启动Excel“应用程序”
  2. 打开“应用程序”将“拥有”的工作簿

打开后续Excel文件时,Excel将跳过第一步,只需在Excel应用程序中打开已经运行的工作簿。注意,这意味着类似于一个工作簿可以有许多工作表,单个应用程序可以有多个属于它的工作簿。

在VBA中访问这些工作簿有多种方法。一种方法是使用应用程序的Workbooks成员,就像使用WorkbookSheets成员访问工作表一样。通常情况下,您只是想访问用户当前正在编辑/处理的工作簿。要做到这一点,您可以使用ActiveWorkbook,只要用户开始处理不同的工作簿,ActiveWorkbook就会自动为您更新。

另一个你经常想要使用的工作簿是你正在运行的代码“存放”的工作簿。您可以通过使用ThisWorkbook来做到这一点。如果打开VBA编辑器并查看项目查看器,甚至可以看到对ThisWorkbook的引用!如果您希望您的代码只更新/更改包含它的工作簿,那么ThisWorkbook就是方法之一。

例如:

假设您有一个宏来循环所有打开的工作簿,并将每个workbook“拥有”的工作表数放入“主”工作簿中的某些工作表中。

你可以这样做:

代码语言:javascript
运行
复制
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

您可以将此代码作为模块放在“主”工作簿中。

让我知道这是否为你澄清了事情!:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31655132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档