Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/как разделить лист excel на отдельные книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
как разделить лист excel на отдельные книги
FantaevAS Дата: Понедельник, 16.09.2013, 18:16 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Доброго времени суток.
Имеется потребность (периодичность 1 раз в день) разделять лист excel на самостоятельные книги.
В принципе если бы уникальных строк по которым делается разделение было бы 5-10 то можно "ручками" (copy-past), но данных, а соответсвенно и получаемых в итоге книг очень много (до 700 штук).
Вопрос: как настроить макрос который мне любезно дали (указываю ниже) чтобы задуманное получилось. От програмирования у немного далек, в связи с чем сам победить его не смог. Сначало необходимо поделить файл на округа (столбец 1) а вторым заходом делить по 2 столбцу. Причем во втором столбце несколько строк принадлежат одному № школы и надо чтобы они легли в один файл который будет называться именно так как называется школа.
[vba]
Код

Sub Macros()
Dim i As Long, j As Long, ok As Boolean
For i = 4 To Cells(3, 2).End(xlDown).Row
For j = 1 To Sheets.Count
If Sheets(j).Name = Sheets(1).Cells(i, 1) Then
Sheets(1).Rows(i).Copy (Sheets(j).Range("A" & Sheets(j).Cells(1, 2).End(xlDown).Row + 1))
ok = True
End If
Next j
If ok = False Then
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Sheets(1).Cells(i, 1)
Sheets(1).Rows(3).Copy
Sheets(Sheets.Count).Rows(1).PasteSpecial Paste:=xlPasteColumnWidths
Sheets(1).Rows(3).Copy (Sheets(Sheets.Count).Range("A1"))
Sheets(1).Rows(i).Copy (Sheets(Sheets.Count).Range("A2"))
Sheets(Sheets.Count).Range("A1").Select
End If
ok = False
Next i
End Sub
[/vba]

Заранее большое спасибо!


Сообщение отредактировал Serge_007 - Понедельник, 16.09.2013, 21:48
 
Ответить
СообщениеДоброго времени суток.
Имеется потребность (периодичность 1 раз в день) разделять лист excel на самостоятельные книги.
В принципе если бы уникальных строк по которым делается разделение было бы 5-10 то можно "ручками" (copy-past), но данных, а соответсвенно и получаемых в итоге книг очень много (до 700 штук).
Вопрос: как настроить макрос который мне любезно дали (указываю ниже) чтобы задуманное получилось. От програмирования у немного далек, в связи с чем сам победить его не смог. Сначало необходимо поделить файл на округа (столбец 1) а вторым заходом делить по 2 столбцу. Причем во втором столбце несколько строк принадлежат одному № школы и надо чтобы они легли в один файл который будет называться именно так как называется школа.
[vba]
Код

Sub Macros()
Dim i As Long, j As Long, ok As Boolean
For i = 4 To Cells(3, 2).End(xlDown).Row
For j = 1 To Sheets.Count
If Sheets(j).Name = Sheets(1).Cells(i, 1) Then
Sheets(1).Rows(i).Copy (Sheets(j).Range("A" & Sheets(j).Cells(1, 2).End(xlDown).Row + 1))
ok = True
End If
Next j
If ok = False Then
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Sheets(1).Cells(i, 1)
Sheets(1).Rows(3).Copy
Sheets(Sheets.Count).Rows(1).PasteSpecial Paste:=xlPasteColumnWidths
Sheets(1).Rows(3).Copy (Sheets(Sheets.Count).Range("A1"))
Sheets(1).Rows(i).Copy (Sheets(Sheets.Count).Range("A2"))
Sheets(Sheets.Count).Range("A1").Select
End If
ok = False
Next i
End Sub
[/vba]

Заранее большое спасибо!

Автор - FantaevAS
Дата добавления - 16.09.2013 в 18:16
FantaevAS Дата: Понедельник, 16.09.2013, 18:17 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
Сори!
Забыл вложить файл.
Исправляюсь.
К сообщению приложен файл: __.xls (45.5 Kb)
 
Ответить
СообщениеСори!
Забыл вложить файл.
Исправляюсь.

Автор - FantaevAS
Дата добавления - 16.09.2013 в 18:17
SergeyKorotun Дата: Понедельник, 16.09.2013, 21:53 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Сначало необходимо поделить файл на округа (столбец 1) а вторым заходом делить по 2 столбцу. Причем во втором столбце несколько строк принадлежат одному № школы и надо чтобы они легли в один файл который будет называться именно так как называется школа.

А зачем делить на округа, если данные для новой книги определяются только по значению столбца "№ школы"? Или в разных округах могут быть одинаковые "№ школы"? Но тогда может получиться и несколько книг с одинаковым именем.
Данные по округу и школе в примере упорядочены. Так и в реальной книге?
 
Ответить
Сообщение
Сначало необходимо поделить файл на округа (столбец 1) а вторым заходом делить по 2 столбцу. Причем во втором столбце несколько строк принадлежат одному № школы и надо чтобы они легли в один файл который будет называться именно так как называется школа.

А зачем делить на округа, если данные для новой книги определяются только по значению столбца "№ школы"? Или в разных округах могут быть одинаковые "№ школы"? Но тогда может получиться и несколько книг с одинаковым именем.
Данные по округу и школе в примере упорядочены. Так и в реальной книге?

Автор - SergeyKorotun
Дата добавления - 16.09.2013 в 21:53
SergeyKorotun Дата: Понедельник, 16.09.2013, 22:58 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Файл именем школы назвать не получится, т.к. символ "/" в имени файла запрещенный. Изменил на "_".
[vba]
Код
Sub Start()
Dim i As Long, j As Long, ok As Boolean
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    For i = 4 To Cells(3, 2).End(xlDown).Row
       For j = 1 To Sheets.Count
          If Sheets(j).Name = Replace(Sheets(1).Cells(i, 2), "/", "_") Then
             Sheets(1).Rows(i).Copy (Sheets(j).Range("A" & Sheets(j).Cells(1, 2).End(xlDown).Row + 1))
             ok = True
          End If
       Next j
       If ok = False Then
          Sheets.Add After:=Sheets(Sheets.Count)
          Sheets(Sheets.Count).Name = Replace(Sheets(1).Cells(i, 2), "/", "_")
          Sheets(1).Rows(3).Copy
          Sheets(Sheets.Count).Rows(1).PasteSpecial Paste:=xlPasteColumnWidths
          Sheets(1).Rows(3).Copy (Sheets(Sheets.Count).Range("A1"))
          Sheets(1).Rows(i).Copy (Sheets(Sheets.Count).Range("A2"))
          Sheets(Sheets.Count).Range("A1").Select
       End If
       ok = False
    Next i
    Call createBooks
    Call delNewSheets
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Private Sub createBooks()
    Dim i As Long
    Dim nmshule As String
     
    For i = 2 To Sheets.Count
        Sheets(i).Select
        nmshule = Sheets(i).Name
        Sheets(i).UsedRange.Select
        Selection.Copy
        Workbooks.Add
        ActiveSheet.Paste
        Columns("H:H").EntireColumn.AutoFit
        Columns("P:P").EntireColumn.AutoFit
        Sheets("Лист1").Select
        Sheets("Лист1").Name = nmshule
        Application.CutCopyMode = False
       
        ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & nmshule & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
             
         ActiveWorkbook.Close 0
    Next i
End Sub

Private Sub delNewSheets()
     Dim i As Long
     For i = Sheets.Count To 2 Step -1
        Sheets(i).Delete
     Next i
End Sub
[/vba]
 
Ответить
СообщениеФайл именем школы назвать не получится, т.к. символ "/" в имени файла запрещенный. Изменил на "_".
[vba]
Код
Sub Start()
Dim i As Long, j As Long, ok As Boolean
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    For i = 4 To Cells(3, 2).End(xlDown).Row
       For j = 1 To Sheets.Count
          If Sheets(j).Name = Replace(Sheets(1).Cells(i, 2), "/", "_") Then
             Sheets(1).Rows(i).Copy (Sheets(j).Range("A" & Sheets(j).Cells(1, 2).End(xlDown).Row + 1))
             ok = True
          End If
       Next j
       If ok = False Then
          Sheets.Add After:=Sheets(Sheets.Count)
          Sheets(Sheets.Count).Name = Replace(Sheets(1).Cells(i, 2), "/", "_")
          Sheets(1).Rows(3).Copy
          Sheets(Sheets.Count).Rows(1).PasteSpecial Paste:=xlPasteColumnWidths
          Sheets(1).Rows(3).Copy (Sheets(Sheets.Count).Range("A1"))
          Sheets(1).Rows(i).Copy (Sheets(Sheets.Count).Range("A2"))
          Sheets(Sheets.Count).Range("A1").Select
       End If
       ok = False
    Next i
    Call createBooks
    Call delNewSheets
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Private Sub createBooks()
    Dim i As Long
    Dim nmshule As String
     
    For i = 2 To Sheets.Count
        Sheets(i).Select
        nmshule = Sheets(i).Name
        Sheets(i).UsedRange.Select
        Selection.Copy
        Workbooks.Add
        ActiveSheet.Paste
        Columns("H:H").EntireColumn.AutoFit
        Columns("P:P").EntireColumn.AutoFit
        Sheets("Лист1").Select
        Sheets("Лист1").Name = nmshule
        Application.CutCopyMode = False
       
        ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & nmshule & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
             
         ActiveWorkbook.Close 0
    Next i
End Sub

Private Sub delNewSheets()
     Dim i As Long
     For i = Sheets.Count To 2 Step -1
        Sheets(i).Delete
     Next i
End Sub
[/vba]

Автор - SergeyKorotun
Дата добавления - 16.09.2013 в 22:58
FantaevAS Дата: Понедельник, 16.09.2013, 23:30 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 40% ±

Excel 2010
SergeyKorotun,
спасибо большое за помощь.
Один нюанс: при запуске макроса выдает: Method 'SaveAs' of object' Workbook failed.
а в VBE выделяет желтым вот это действие:
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & nmshule & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
[/vba]

Создает только один лист с одной школой.
Это может быть из-за различий офисов. Сейсас нахожусь дома (2003) на работе где и нужен файл стоит 2010.


Сообщение отредактировал Serge_007 - Понедельник, 16.09.2013, 23:42
 
Ответить
СообщениеSergeyKorotun,
спасибо большое за помощь.
Один нюанс: при запуске макроса выдает: Method 'SaveAs' of object' Workbook failed.
а в VBE выделяет желтым вот это действие:
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & nmshule & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
[/vba]

Создает только один лист с одной школой.
Это может быть из-за различий офисов. Сейсас нахожусь дома (2003) на работе где и нужен файл стоит 2010.

Автор - FantaevAS
Дата добавления - 16.09.2013 в 23:30
Матрёна Дата: Вторник, 17.09.2013, 00:16 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 398
Репутация: 40 ±
Замечаний: 0% ±

FantaevAS!
См. вариант (для любого EXCEL).
К сообщению приложен файл: FantaevAS.rar (47.0 Kb)


Сообщение отредактировал Матрёна - Вторник, 17.09.2013, 01:03
 
Ответить
СообщениеFantaevAS!
См. вариант (для любого EXCEL).

Автор - Матрёна
Дата добавления - 17.09.2013 в 00:16
SergeyKorotun Дата: Вторник, 17.09.2013, 00:17 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Писал на 2010.
Только проверил на 2007 - работает.
2003 нет.
Ограничение: номера школ не должны совпадать, иначе ранее созданные файлы будут заменены вновь созданными.
Можно было бы имя файла составить из значений двух первых столбцов.
 
Ответить
СообщениеПисал на 2010.
Только проверил на 2007 - работает.
2003 нет.
Ограничение: номера школ не должны совпадать, иначе ранее созданные файлы будут заменены вновь созданными.
Можно было бы имя файла составить из значений двух первых столбцов.

Автор - SergeyKorotun
Дата добавления - 17.09.2013 в 00:17
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!