powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / обработка данных в excel
14 сообщений из 14, страница 1 из 1
обработка данных в excel
    #34827174
Ivan A Burov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
абсолютно не шарю в макросах excel
имеем большую таблицу с данными.
в первом поле название региона, далее инфа.
необходимо по каждому региону сделать фильтр и выложить\записать отфильтрованные по названию региона (без других регионов) в отдельный excel файл...
...
Рейтинг: 0 / 0
обработка данных в excel
    #34827210
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Познакомся с макрорекодером.
Меню "сервис-макрос-начать запись"
...
Рейтинг: 0 / 0
обработка данных в excel
    #34827308
Ivan A Burov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бррр... а это тут причем? что записывать то, если я макрос не сделаю?
мне нужно создать отдельные файлики так, чтобы в каждом файле было записано только по одному региону (записей по региону может несколько).
...
Рейтинг: 0 / 0
обработка данных в excel
    #34827587
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, выставляем автофильтр это в меню "данные-фильтр-автофильтр",
включаем запись "сервис-макрос-начать запись"
выбераем в первом столбце первый регион
выделяем строки
копируем их в новую книгу
сохраняем книгу
останавливаем запись макроса
идем в редактор VBA
смотрим код
берем напильник и дорабатываем заключив в цикл полученный код.
...
Рейтинг: 0 / 0
обработка данных в excel
    #34827829
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В помощь

Установки фильтр по названию столбца
http://sql.ru/forum/actualthread.aspx?tid=477008

Как выделить диапазон созданный автофильтром?
http://bbs.vbstreets.ru/viewtopic.php?t=34334&sid=f1d616fc23733eb1a29ab2a1f20cb174
...
Рейтинг: 0 / 0
обработка данных в excel
    #34832796
Ivan A Burov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всё сделал как написали (собрал код из разных приведенных ссылок), но трабл в том что у меня копируется вся таблица а не только выбранные фильтром строки...

как быть может кто-нибудь подскажет.. реально с Excel VBA полные грабли
...
Рейтинг: 0 / 0
обработка данных в excel
    #34833362
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи код. Мы подправим.
...
Рейтинг: 0 / 0
обработка данных в excel
    #34833761
Ivan A Burov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот то что выделяет и копирует данные...


Selection.AutoFilter Field:=1, Criteria1:="Ryazan"
Set myFiltered = ActiveSheet.AutoFilter.Range.Offset(0, 0).SpecialCells(xlCellTypeVisible)
myFiltered.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ChDir "C:\Documents and Settings\IBurov\Рабочий стол"
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\IBurov\Рабочий стол\Книга1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False


как сделать автофильтр по каждой из записи 1го столбца и потом записать выделенное в отдельный файлик с названием автофильтра...
...
Рейтинг: 0 / 0
обработка данных в excel
    #34834753
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...мне вот тут недавно помогали с рекордсетом..., его можно использовать для задачи - переходить в цикле по каждому региону из списка:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ActiveWorkbook.FullName & "; Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
            
    rst.Open "SELECT DISTINCT * FROM [Data$A:A]", cnn
    
    rst.MoveFirst
    
    Do Until rst.EOF
    rst.MoveNext
    
    Debug.Print rst.Fields( 0 )
    
    Loop
 
    rst.Close
    cnn.Close
    
    Set rst = Nothing
    Set cnn = Nothing

...
Рейтинг: 0 / 0
обработка данных в excel
    #34835839
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот посмотрите как в вашем макросе можно брать значения из 1-го столбца, отфильтровывать по этому критерию автофильтр и сохранять файлы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Sub Выгрузка()
Dim myFiltered As Range 'отфильтрованный диапазон
Dim MyCol As Object 'столбец с нашими значениями с автофильтром
Dim iCrit$ 'критерий отбора
Dim iLastRow&, i&
Dim iPath$
    On Error GoTo ErrHandler
    Set MyCol = Rows( 1 ).Find("Продажи") 'ищем столбец с нужным названием Продажи - как пример
    iLastRow = Cells(ActiveSheet.Rows.Count,  1 ).End(xlUp).Row
    For i =  2  To iLastRow
        iCrit = Cells(i,  1 )
        If MyCol Is Nothing Then
            MsgBox "Столбец с данными не найден!", vbExclamation, "Ошибка"
            Exit Sub
        End If
        Application.ScreenUpdating = False
        If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
        Selection.AutoFilter field:=MyCol.Column, Criteria1:=iCrit
        Set myFiltered = ActiveSheet.AutoFilter.Range.Offset( 0 ,  0 ).SpecialCells(xlCellTypeVisible)
        myFiltered.Copy
        Workbooks.Add
        ActiveSheet.Paste
        Application.CutCopyMode = False
        iPath = "C:\Temp\" 'путь, куда будем сохранять файлы
        ActiveWorkbook.SaveAs Filename:=iPath & iCrit & ".xls"
        Range("A1").Select
'        ActiveWorkbook.SaveAs Filename:= _
'            "C:\Documents and Settings\IBurov\Рабочий стол\Книга1.xls", FileFormat:= _
'                xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
'                , CreateBackup:=False
        ActiveWorkbook.Close True 'закрыть книгу сохранив изменения
    Next i
    If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
    Application.ScreenUpdating = True
    MsgBox "Выгрузка завершена!" & vbCrLf & "Файлы сохранены в папке: " & iPath, vbInformation, "Конец"
    Exit Sub
ErrHandler:
    MsgBox "При выполнении макроса произошла ошибка!" & vbCrLf & "Описание: " & Err.Description & vbCrLf & "Номер: " & Err.Number, vbExclamation, "Ошибка"
End Sub
...
Рейтинг: 0 / 0
обработка данных в excel
    #34835847
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм...
перенесите строку

Код: plaintext
Range("A1").Select

выше, поставьте её перед строкой

Код: plaintext
ActiveWorkbook.SaveAs Filename:=iPath & iCrit & ".xls"
...
Рейтинг: 0 / 0
обработка данных в excel
    #34837679
Ivan A Burov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну хоть убейте... ну не выходит каменный цветок.. вот данные
...
Рейтинг: 0 / 0
обработка данных в excel
    #34837958
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Option Explicit
Sub Выгрузка()
    Dim myFiltered As Range 'отфильтрованный диапазон
    Dim MyCol As Object 'столбец с нашими значениями с автофильтром
    Dim iCrit$ 'критерий отбора
    Dim iLastRow&, i&, i2 As Long
    Dim iPath$
    Dim fil As Filter
    Dim tmp() As String, fl As Boolean
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    On Error GoTo ErrHandler
    ActiveSheet.Cells.UnMerge
    If ActiveSheet.AutoFilterMode Then
        For Each fil In ActiveSheet.AutoFilter.Filters
            If fil.On Then ActiveSheet.ShowAllData: Exit For
        Next
    Else
        ActiveSheet.Range(ActiveSheet.Cells( 2 ,  1 ), ActiveSheet.Cells( 2 , ActiveSheet.UsedRange.Columns.Count +  1 )).AutoFilter '
    End If
    iLastRow = ActiveSheet.Cells(Rows.Count,  1 ).End(xlUp).Row
    ReDim tmp( 0 )
    iPath = "C:\Temp\" 'путь, куда будем сохранять файлы
    For i =  3  To iLastRow
        iCrit = ActiveSheet.Cells(i,  1 )
        fl = False
        For i2 =  0  To UBound(tmp)
            If iCrit = tmp(i2) Then fl = True
        Next
        If Not fl Then
            If tmp( 0 ) <> "" Then ReDim Preserve tmp(UBound(tmp) +  1 )
            tmp(UBound(tmp)) = iCrit
            ActiveSheet.Cells( 1 ,  1 ).AutoFilter field:= 1 , Criteria1:=iCrit
            Set myFiltered = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
            myFiltered.Copy
            Workbooks.Add
            ActiveSheet.Paste
            Application.CutCopyMode = False
            ActiveWorkbook.SaveAs Filename:=iPath & iCrit & ".xls"
            ActiveWorkbook.Close True 'закрыть книгу сохранив изменения
        End If
    Next i
    ActiveSheet.ShowAllData
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "Выгрузка завершена!" & vbCrLf & "Файлы сохранены в папке: " & iPath, vbInformation, "Конец"
    Exit Sub
ErrHandler:
    MsgBox "При выполнении макроса произошла ошибка!" & vbCrLf & "Описание: " & Err.Description & vbCrLf & "Номер: " & Err.Number, vbExclamation, "Ошибка"
End Sub
...
Рейтинг: 0 / 0
обработка данных в excel
    #34838089
Ivan A Burov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОГРОМЕННЫЙ респект, Великому ГУРУ vkodor !!!
СПАСИБО!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / обработка данных в excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]