Доброго времени суток. Имеется потребность (периодичность 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]
Заранее большое спасибо!
Доброго времени суток. Имеется потребность (периодичность 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
Сначало необходимо поделить файл на округа (столбец 1) а вторым заходом делить по 2 столбцу. Причем во втором столбце несколько строк принадлежат одному № школы и надо чтобы они легли в один файл который будет называться именно так как называется школа.
А зачем делить на округа, если данные для новой книги определяются только по значению столбца "№ школы"? Или в разных округах могут быть одинаковые "№ школы"? Но тогда может получиться и несколько книг с одинаковым именем. Данные по округу и школе в примере упорядочены. Так и в реальной книге?
Сначало необходимо поделить файл на округа (столбец 1) а вторым заходом делить по 2 столбцу. Причем во втором столбце несколько строк принадлежат одному № школы и надо чтобы они легли в один файл который будет называться именно так как называется школа.
А зачем делить на округа, если данные для новой книги определяются только по значению столбца "№ школы"? Или в разных округах могут быть одинаковые "№ школы"? Но тогда может получиться и несколько книг с одинаковым именем. Данные по округу и школе в примере упорядочены. Так и в реальной книге?SergeyKorotun
Файл именем школы назвать не получится, т.к. символ "/" в имени файла запрещенный. Изменил на "_". [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
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
SergeyKorotun, спасибо большое за помощь. Один нюанс: при запуске макроса выдает: Method 'SaveAs' of object' Workbook failed. а в VBE выделяет желтым вот это действие: [vba]
Создает только один лист с одной школой. Это может быть из-за различий офисов. Сейсас нахожусь дома (2003) на работе где и нужен файл стоит 2010.
SergeyKorotun, спасибо большое за помощь. Один нюанс: при запуске макроса выдает: Method 'SaveAs' of object' Workbook failed. а в VBE выделяет желтым вот это действие: [vba]
Создает только один лист с одной школой. Это может быть из-за различий офисов. Сейсас нахожусь дома (2003) на работе где и нужен файл стоит 2010.FantaevAS
Сообщение отредактировал Serge_007 - Понедельник, 16.09.2013, 23:42
Писал на 2010. Только проверил на 2007 - работает. 2003 нет. Ограничение: номера школ не должны совпадать, иначе ранее созданные файлы будут заменены вновь созданными. Можно было бы имя файла составить из значений двух первых столбцов.
Писал на 2010. Только проверил на 2007 - работает. 2003 нет. Ограничение: номера школ не должны совпадать, иначе ранее созданные файлы будут заменены вновь созданными. Можно было бы имя файла составить из значений двух первых столбцов.SergeyKorotun