Добрый вечер. Прошу помочь в решении следующей задачи. Есть лист и в нем несколько однотипных таблиц (лист "Исходный формат"). Количество столбцов не меняется, но в таблицах может быть разное количество строк. Необходимо этот лист разбить на несколько листов. Каждый лист должен начинаться с пустой строки + "Сведения о клиенте". Имя листа должно присваиваться из строки, которая идет после "Сведения о клиенте". Причем, слова "по списку" не должны быть в имени листа. Есть похожие темы на форумах, но во всех примерах есть отдельный столбец, в котором содержатся признаки, по которому нужно делить лист. А столбца с признаком у меня нет. Нашел макрос (в книге в примере), который делает похожие операции, но не могу разобраться в коде, чтобы подредактировать под свои нужды. Буду рад любому совету/подсказке!
Добрый вечер. Прошу помочь в решении следующей задачи. Есть лист и в нем несколько однотипных таблиц (лист "Исходный формат"). Количество столбцов не меняется, но в таблицах может быть разное количество строк. Необходимо этот лист разбить на несколько листов. Каждый лист должен начинаться с пустой строки + "Сведения о клиенте". Имя листа должно присваиваться из строки, которая идет после "Сведения о клиенте". Причем, слова "по списку" не должны быть в имени листа. Есть похожие темы на форумах, но во всех примерах есть отдельный столбец, в котором содержатся признаки, по которому нужно делить лист. А столбца с признаком у меня нет. Нашел макрос (в книге в примере), который делает похожие операции, но не могу разобраться в коде, чтобы подредактировать под свои нужды. Буду рад любому совету/подсказке!Leojse
Оставьте только лист Исходный формат и запустите макрос [vba]
Код
Sub DivideTable1() Dim FoundCell As Range Dim FAdr As String Dim FRow As Long Dim ERow As Long Dim NameList As String Dim List1 As Worksheet Set List1 = ThisWorkbook.Worksheets("Исходный формат") Set FoundCell = Columns("B:AA").Find("Сведения о клиенте", , xlValues, xlWhole) If Not FoundCell Is Nothing Then FAdr = FoundCell.Address Do FRow = FoundCell.Row ERow = Cells(FRow + 6, "V").End(xlDown).Row NameList = Split(FoundCell.Offset(1), " ")(2) Worksheets.Add After:=Worksheets(Worksheets.Count) 'созданный лист будет активным ActiveSheet.Name = NameList List1.Range(List1.Cells(FRow, "A"), List1.Cells(ERow, "AD")).Copy Range("A2").PasteSpecial xlPasteColumnWidths Range("A2").PasteSpecial xlPasteAll Range("A1").Select List1.Select Set FoundCell = Columns("B:AA").FindNext(FoundCell) Loop While FoundCell.Address <> FAdr End If Application.CutCopyMode = False End Sub
[/vba]
Оставьте только лист Исходный формат и запустите макрос [vba]
Код
Sub DivideTable1() Dim FoundCell As Range Dim FAdr As String Dim FRow As Long Dim ERow As Long Dim NameList As String Dim List1 As Worksheet Set List1 = ThisWorkbook.Worksheets("Исходный формат") Set FoundCell = Columns("B:AA").Find("Сведения о клиенте", , xlValues, xlWhole) If Not FoundCell Is Nothing Then FAdr = FoundCell.Address Do FRow = FoundCell.Row ERow = Cells(FRow + 6, "V").End(xlDown).Row NameList = Split(FoundCell.Offset(1), " ")(2) Worksheets.Add After:=Worksheets(Worksheets.Count) 'созданный лист будет активным ActiveSheet.Name = NameList List1.Range(List1.Cells(FRow, "A"), List1.Cells(ERow, "AD")).Copy Range("A2").PasteSpecial xlPasteColumnWidths Range("A2").PasteSpecial xlPasteAll Range("A1").Select List1.Select Set FoundCell = Columns("B:AA").FindNext(FoundCell) Loop While FoundCell.Address <> FAdr End If Application.CutCopyMode = False End Sub