Excel宏自动过滤和导出结果

时间:2017-02-13 08:08:09

标签: excel vba excel-vba

我有一个excel文件,其中C列有时会重复使用值:

 A | B | C 
------------
 1 | 2 | a
 1 | 4 | b
 1 | 5 | c
 1 | 2 | d
 1 | 6 | a
 4 | 2 | d
 1 | 2 | a
 4 | 4 | c
 8 | 2 | c
 1 | 8 | d

我想为每个值(a,b,c,d,..,n)创建一个过滤C列的宏,并将结果保存到新文件中。

在我的例子中,宏返回4文件F1,F2,F3,F4 whit这个内容:

 A | B | C 
------------
 1 | 2 | a
 1 | 6 | a
 1 | 2 | a


 A | B | C 
------------
 1 | 4 | b


 A | B | C 
------------
 1 | 5 | c
 4 | 4 | c
 8 | 2 | c


 A | B | C 
------------
 1 | 2 | d
 4 | 2 | d
 1 | 8 | d

怎么写宏?

2 个答案:

答案 0 :(得分:1)

这是代码。您必须每次手动保存创建的文件。如果您要我设置默认位置并自动保存所有文件,请告诉我。

\代码\

Function perform_click()

Dim i, lastrow As Integer
Dim ws1, ws2 As Workbook

Set ws1 = ThisWorkbook
lastrow = ws1.Sheets("Sheet1").Range("C500000").End(xlUp).Row

ws1.Sheets("Sheet1").Range("C4:C" & lastrow).Copy Range("P4")
ws1.Sheets("Sheet1").Range("P4:P" & lastrow).RemoveDuplicates 1, xlNo


ActiveSheet.AutoFilterMode = False

For i = 4 To ws1.Sheets("Sheet1").Range("P500000").End(xlUp).Row

ws1.Sheets("Sheet1").Range("A3:C" & lastrow).AutoFilter 3, ws1.Sheets("Sheet1").Range("P" & i).Value
Set ws2 = Workbooks.Add
ws1.Sheets("Sheet1").Range("A3:C" & lastrow).SpecialCells(xlCellTypeVisible).Copy ws2.Sheets("Sheet1").Range("A3")

Application.DisplayAlerts = False
ws2.SaveAs "C:\Users\Praveen Behera\Desktop\F" & i & ".xlsx", 51
Application.DisplayAlerts = True

Set ws2 = Nothing
Next i

End Function

Private Sub CommandButton1_Click()

perform_click

End Sub

答案 1 :(得分:0)

使用Oledb查询将列c的不同值转换为数组...然后编写另一个查询以获取数组的不同值的值。