Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2012, 13:42   #1
Bzik666
 
Регистрация: 24.11.2012
Сообщений: 7
По умолчанию Разбивка файла на части по значениям

Всем доброго времени суток.
Интересует такой вопрос. Как сделать разбивку файла Excel на части по значениям из столбца. Во вложенном файле находится структура файла. Необходимо сделать разбивку по столбцу Код ОУ. Например там идут значения 0001, 0002, 0002, 0003 и соответственно должно делиться на файлы 0001.xls, 0002.xls и т.д.
Заранее спасибо.
Bzik666 вне форума Ответить с цитированием
Старый 06.12.2012, 13:44   #2
Bzik666
 
Регистрация: 24.11.2012
Сообщений: 7
По умолчанию

файл со структурой
Вложения
Тип файла: rar структура.rar (7.3 Кб, 9 просмотров)
Bzik666 вне форума Ответить с цитированием
Старый 07.12.2012, 10:10   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Конкретно пальцем покажите - где "там идут значения 0001, 0002, 0002, 0003"
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.12.2012, 10:54   #4
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

1) еще интересует код (0001) встречается только один раз или несколько раз?
2) должна копироваться строка с кодом (0001) или диапазон?
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 07.12.2012, 13:16   #5
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

смотрите пример:

Код:
Sub Разрезать_по_файлам()
    Dim vItem, avArr, x, li As Long, i As Long, j As Long, n As Long, ce As Long
    Application.ScreenUpdating = False
    ce = Cells(Rows.Count, "C").End(xlUp).Row
    ReDim avArr(1 To ce, 1 To 1)
    With New Collection
        On Error Resume Next
        For Each vItem In Range("C2", Cells(Rows.Count, "C").End(xlUp)).Value
        'Cells(Rows.Count, 1).End(xlUp) - определяет последнюю заполненную ячейку в столбце А
            .Add vItem, CStr(vItem)
            If Err = 0 Then
                li = li + 1: avArr(li, 1) = vItem
            Else: Err.Clear
            End If
        Next
    End With
    'If li Then [E2].Resize(li).Value = avArr
    
    x = Range("A1", "AD" & ce).Value
    Fname = ThisWorkbook.Path
    MkDir Fname
    For i = 1 To UBound(avArr)
        For j = 1 To UBound(x)
            If IsEmpty(avArr(i, 1)) Then Exit For 
            If x(j, 3) = avArr(i, 1) Or x(j, 3) = "код ОУ" Then
                n = n + 1
            End If
        Next j
        If n > 0 Then
            Workbooks.Add xlWBATWorksheet
            [A1].Resize(n, 30).Value = x
            ActiveWorkbooks.Name = avArr(i, 1)
            ActiveSheet.Name = avArr(i, 1) ' поправбте в файле эту строку (было activesheets.Name)
            Set wb = ActiveWorkbook
            With wb
                .SaveAs Fname & "\" & avArr(i, 1) & ".xls", xlNormal 'FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
                .Close
            End With
            n = 0
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

вот этот код:
Код:
    Dim vItem, avArr, x, li As Long, i As Long, j As Long, n As Long, ce As Long
    Application.ScreenUpdating = False
    ce = Cells(Rows.Count, "C").End(xlUp).Row
    ReDim avArr(1 To ce, 1 To 1)
    With New Collection
        On Error Resume Next
        For Each vItem In Range("C2", Cells(Rows.Count, "C").End(xlUp)).Value
        'Cells(Rows.Count, 1).End(xlUp) - определяет последнюю заполненную ячейку в столбце А
            .Add vItem, CStr(vItem)
            If Err = 0 Then
                li = li + 1: avArr(li, 1) = vItem
            Else: Err.Clear
            End If
        Next
    End With
    'If li Then [E2].Resize(li).Value = avArr
взял из примера (Поиск уникальных значений) The_Prist
http://www.excel-vba.ru/chto-umeet-e...sya-znachenij/
Вложения
Тип файла: rar структура.rar (16.7 Кб, 11 просмотров)
Единственный способ стать умнее, играть с более умным противником...

Последний раз редактировалось staniiislav; 07.12.2012 в 13:44.
staniiislav вне форума Ответить с цитированием
Старый 07.12.2012, 14:58   #6
Bzik666
 
Регистрация: 24.11.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
1) еще интересует код (0001) встречается только один раз или несколько раз?
2) должна копироваться строка с кодом (0001) или диапазон?
код может встречаться несколько раз.
должен копироваться диапазон с данным кодом.

Ваш код опробовал. файлы создаются, но пустые. Не подскажете что нужно исправить?

И было бы идеально, если бы можно было выбирать файл для разбивки

Последний раз редактировалось Bzik666; 07.12.2012 в 15:02.
Bzik666 вне форума Ответить с цитированием
Старый 07.12.2012, 15:29   #7
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Ваш код опробовал. файлы создаются, но пустые. Не подскажете что нужно исправить?
так вы таблицу дали пустую, мне даже пришлось самому целых два кода написать (0001, 0002 )

Цитата:
И было бы идеально, если бы можно было выбирать файл для разбивки
а вот это условия было указанно не корректно!!!
Это в корни меняет макрос... давайте файлы с нормальными примерами, будет время посмотрю
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 07.12.2012, 15:55   #8
Bzik666
 
Регистрация: 24.11.2012
Сообщений: 7
По умолчанию

могу кусочек файла дать=)
Вложения
Тип файла: rar структура.rar (9.3 Кб, 8 просмотров)
Bzik666 вне форума Ответить с цитированием
Старый 07.12.2012, 17:02   #9
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

а файлы в которые должна копироваться информация где?
а теперь конкретика, как вы хотите чтобы данные сохранялись в нужные вам файлы?
варианты:
1) файлы заранее открыты, и в них копируется информация (копирование будет происходить по названию файла, то есть если код 0001 соответствует названию книги 0001 и листа 0001, то данные будут скопированы)
- дополняется
- заменяется
2) выводилось сообщение какой сейчас обработался код, затем выводилось окно для выбора файла куда сохранять данные
- дополняется
- заменяется
3) ну и создание новых файлов (вариант который уже сделан)
Единственный способ стать умнее, играть с более умным противником...

Последний раз редактировалось staniiislav; 07.12.2012 в 17:05.
staniiislav вне форума Ответить с цитированием
Старый 10.12.2012, 10:58   #10
Bzik666
 
Регистрация: 24.11.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
а файлы в которые должна копироваться информация где?
а теперь конкретика, как вы хотите чтобы данные сохранялись в нужные вам файлы?
варианты:
1) файлы заранее открыты, и в них копируется информация (копирование будет происходить по названию файла, то есть если код 0001 соответствует названию книги 0001 и листа 0001, то данные будут скопированы)
- дополняется
- заменяется
2) выводилось сообщение какой сейчас обработался код, затем выводилось окно для выбора файла куда сохранять данные
- дополняется
- заменяется
3) ну и создание новых файлов (вариант который уже сделан)
Вариант который сделан. Копирование всех заполненных столбцов в новые файлы.
Bzik666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdHTTP - размер скачанной части файла fezilk25 Работа с сетью в Delphi 1 09.02.2011 11:29
Разбивка строки на части ForzaJuve Общие вопросы C/C++ 2 01.11.2010 23:12
Asm. Разбивка строки на две части levis07 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 30.03.2010 14:30
Разбивка текста на части Алекс14 Microsoft Office Word 28 23.02.2010 14:53
Вывод части текста из файла CoDeR Общие вопросы Delphi 10 16.08.2007 14:30