2017-02-13 3 views
-1

У меня есть файл первенствовать, имеющий столбец C с иногда repeteated значений:Excel Макрос для автоматического фильтра и экспорт результата

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 

Я хотел бы создать макрос, который фильтр C столбец для каждого значения (а, б, c, d, .., n) и сохранить результат в новом файле.

В моем примере макрос возвращение 4 файла F1, F2, F3, F4 йота это содержание:

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 

Как можно было бы написать макрос?

+1

Возможно путь начал писать это? Извините, но вы только отбросили требования. Идея здесь в том, что вы показываете код, а затем люди помогают устранять проблемы в этом коде. В противном случае, похоже, вы ожидаете, что другие люди сделают вашу работу за вас. – GhostCat

ответ

0

используйте запрос Oledb, чтобы получить различные значения столбца c в массив ... и затем написать другой запрос для получения значений для разных значений массива.

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 
+0

Да, моя цель - сохранить все файлы на рабочем столе. Благодаря! – padibro

+0

Большое спасибо. Пожалуйста, отметьте мой ответ как ответ :) –

Смежные вопросы