Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / обработка данных в excel / 14 сообщений из 14, страница 1 из 1
26.09.2007, 11:57:32
    #34827174
Ivan A Burov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
абсолютно не шарю в макросах excel
имеем большую таблицу с данными.
в первом поле название региона, далее инфа.
необходимо по каждому региону сделать фильтр и выложить\записать отфильтрованные по названию региона (без других регионов) в отдельный excel файл...
...
Рейтинг: 0 / 0
26.09.2007, 12:04:59
    #34827210
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
Познакомся с макрорекодером.
Меню "сервис-макрос-начать запись"
...
Рейтинг: 0 / 0
26.09.2007, 12:24:52
    #34827308
Ivan A Burov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
бррр... а это тут причем? что записывать то, если я макрос не сделаю?
мне нужно создать отдельные файлики так, чтобы в каждом файле было записано только по одному региону (записей по региону может несколько).
...
Рейтинг: 0 / 0
26.09.2007, 13:17:04
    #34827587
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
Так, выставляем автофильтр это в меню "данные-фильтр-автофильтр",
включаем запись "сервис-макрос-начать запись"
выбераем в первом столбце первый регион
выделяем строки
копируем их в новую книгу
сохраняем книгу
останавливаем запись макроса
идем в редактор VBA
смотрим код
берем напильник и дорабатываем заключив в цикл полученный код.
...
Рейтинг: 0 / 0
26.09.2007, 14:02:26
    #34827829
Pavel55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
В помощь

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

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

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


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
28.09.2007, 14:12:56
    #34834753
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
...мне вот тут недавно помогали с рекордсетом..., его можно использовать для задачи - переходить в цикле по каждому региону из списка:

Код: 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
28.09.2007, 18:49:13
    #34835839
Pavel55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
Вот посмотрите как в вашем макросе можно брать значения из 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
28.09.2007, 18:53:00
    #34835847
Pavel55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
хм...
перенесите строку

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

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

Код: plaintext
ActiveWorkbook.SaveAs Filename:=iPath & iCrit & ".xls"
...
Рейтинг: 0 / 0
01.10.2007, 10:49:03
    #34837679
Ivan A Burov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
ну хоть убейте... ну не выходит каменный цветок.. вот данные
...
Рейтинг: 0 / 0
01.10.2007, 12:05:23
    #34837958
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
Код: 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
01.10.2007, 12:45:33
    #34838089
Ivan A Burov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка данных в excel
ОГРОМЕННЫЙ респект, Великому ГУРУ vkodor !!!
СПАСИБО!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / обработка данных в excel / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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