到目前为止,我有这段代码,仅适用于第2页,我如何修改此代码以将多个工作表包含在其中?这里是完整的新人。:
Sub extractuniquevalues()
Sheet1.Range("C:C").AdvancedFilter xlFilterCopy, , Sheet4.Range("C1"), True
Sheet2.Range("C:C").AdvancedFilter xlFilterCopy, , Sheet4.Range("C1"), True
End Sub
发布于 2015-07-27 14:03:38
你可以这样做:
过滤数据就位
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
。
注意,第一个值被认为是一个标头,可以在结果列表中复制它。
发布于 2015-07-27 18:34:58
我觉得你的评论值得我把它作为一个回答,这样我可能会更彻底一些。,这只意味着添加到mielk!提供的答案中
excel中的对象层次结构大致概括为“Excel应用程序拥有工作簿,Excel工作簿拥有工作表,Excel工作表拥有范围”。有关该信息的更多信息,请访问这里。
当您单击excel文件来打开它时,您实际上做了两件事:
打开后续Excel文件时,Excel将跳过第一步,只需在Excel应用程序中打开已经运行的工作簿。注意,这意味着类似于一个工作簿可以有许多工作表,单个应用程序可以有多个属于它的工作簿。
在VBA中访问这些工作簿有多种方法。一种方法是使用应用程序的Workbooks
成员,就像使用Workbook
的Sheets
成员访问工作表一样。通常情况下,您只是想访问用户当前正在编辑/处理的工作簿。要做到这一点,您可以使用ActiveWorkbook
,只要用户开始处理不同的工作簿,ActiveWorkbook
就会自动为您更新。
另一个你经常想要使用的工作簿是你正在运行的代码“存放”的工作簿。您可以通过使用ThisWorkbook
来做到这一点。如果打开VBA编辑器并查看项目查看器,甚至可以看到对ThisWorkbook
的引用!如果您希望您的代码只更新/更改包含它的工作簿,那么ThisWorkbook
就是方法之一。
例如:
假设您有一个宏来循环所有打开的工作簿,并将每个workbook“拥有”的工作表数放入“主”工作簿中的某些工作表中。
你可以这样做:
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
您可以将此代码作为模块放在“主”工作簿中。
让我知道这是否为你澄清了事情!:)
https://stackoverflow.com/questions/31655132
复制相似问题