В Готовых решениях нашёл тему по Разделению таблицы по листам по критерию www.excelworld.ru подскажите пожалуйста как адаптировать код макроса (Сам не очень селен в VBA) для разделения одного столба по листам по заданным критериям
[vba]
Код
Sub DivEtImp(Optional ByVal Col As Long = 1, Optional ByVal Del As Boolean = True)
Dim i As Long, cl As Long, rw As Long Dim Dic As Object Dim ShNam As String, Bads() As String Dim Bad As Variant
Application.ScreenUpdating = False Set Dic = CreateObject("Scripting.Dictionary") With Worksheets(1) cl = .Cells(1, Columns.Count).End(xlToLeft).Column rw = .Cells(Rows.Count, Col).End(xlUp).Row For i = 2 To .Cells(Rows.Count, Col).End(xlUp).Row On Error Resume Next Dic.Add Key:=Trim(.Cells(i, Col).Value), Item:="" Next i End With Application.ScreenUpdating = False With Dic For i = 0 To .Count - 1 Worksheets(1).Copy after:=Worksheets(Sheets.Count) Bads = Array(":", "\", "/", "[", "]", "?", "*") ShNam = .Keys()(i) For Each Bad In Bads ShNam = Replace(ShNam, Bad, " ", 1, -1, vbTextCompare) Next Bad ActiveSheet.Name = Left(ShNam, 31) Cells(1, Col).Copy Destination:=Cells(1, cl + 2) Cells(2, cl + 2).Value = .Keys()(i) Range(Cells(1, 1), Cells(rw, cl)).AdvancedFilter Action:=xlFilterCopy, criteriarange:=Range(Cells(1, cl + 2), Cells(2, cl + 2)), copytorange:=Cells(1, cl + 4) Range(Columns(1), Columns(cl + 3)).Delete If Del Then Columns(Col).Delete Range(Columns(1), Columns(IIf(Del, cl - 1, cl))).EntireColumn.AutoFit Next i End With Application.ScreenUpdating = True End Sub
[/vba]. имеется таблица с размещенными сведениями в одном столбе
критерий-1 текст текст текст
критерий-2 текст текст текст
критерий-2 текст текст текст
макрос должен создать лист с названием "критерий-1" и выбрать туда в первый столбец все строки до критерия-2 дальше создать лист с названием "критерий-2" и выбрать туда в первый столбец все строки до критерия-3 и т.д. а. так же сравнивать название критериев с названием уже существующих листов, в случаи их совпадения добавлять туда новые данные
файл для примера с исходным макросом лист1, на листе 2 импровизированная таблица которую не обходимо разделить с конечным вариантом в виде талицы.
Добрый день!
В Готовых решениях нашёл тему по Разделению таблицы по листам по критерию www.excelworld.ru подскажите пожалуйста как адаптировать код макроса (Сам не очень селен в VBA) для разделения одного столба по листам по заданным критериям
[vba]
Код
Sub DivEtImp(Optional ByVal Col As Long = 1, Optional ByVal Del As Boolean = True)
Dim i As Long, cl As Long, rw As Long Dim Dic As Object Dim ShNam As String, Bads() As String Dim Bad As Variant
Application.ScreenUpdating = False Set Dic = CreateObject("Scripting.Dictionary") With Worksheets(1) cl = .Cells(1, Columns.Count).End(xlToLeft).Column rw = .Cells(Rows.Count, Col).End(xlUp).Row For i = 2 To .Cells(Rows.Count, Col).End(xlUp).Row On Error Resume Next Dic.Add Key:=Trim(.Cells(i, Col).Value), Item:="" Next i End With Application.ScreenUpdating = False With Dic For i = 0 To .Count - 1 Worksheets(1).Copy after:=Worksheets(Sheets.Count) Bads = Array(":", "\", "/", "[", "]", "?", "*") ShNam = .Keys()(i) For Each Bad In Bads ShNam = Replace(ShNam, Bad, " ", 1, -1, vbTextCompare) Next Bad ActiveSheet.Name = Left(ShNam, 31) Cells(1, Col).Copy Destination:=Cells(1, cl + 2) Cells(2, cl + 2).Value = .Keys()(i) Range(Cells(1, 1), Cells(rw, cl)).AdvancedFilter Action:=xlFilterCopy, criteriarange:=Range(Cells(1, cl + 2), Cells(2, cl + 2)), copytorange:=Cells(1, cl + 4) Range(Columns(1), Columns(cl + 3)).Delete If Del Then Columns(Col).Delete Range(Columns(1), Columns(IIf(Del, cl - 1, cl))).EntireColumn.AutoFit Next i End With Application.ScreenUpdating = True End Sub
[/vba]. имеется таблица с размещенными сведениями в одном столбе
критерий-1 текст текст текст
критерий-2 текст текст текст
критерий-2 текст текст текст
макрос должен создать лист с названием "критерий-1" и выбрать туда в первый столбец все строки до критерия-2 дальше создать лист с названием "критерий-2" и выбрать туда в первый столбец все строки до критерия-3 и т.д. а. так же сравнивать название критериев с названием уже существующих листов, в случаи их совпадения добавлять туда новые данные
файл для примера с исходным макросом лист1, на листе 2 импровизированная таблица которую не обходимо разделить с конечным вариантом в виде талицы.Driven2002
Цвет не какого отношения к делению на листы не имеет. В лист 1 размещается в один столбик текст (столб А), который вставляется из документа word. В строках этого столба содержаться контрольные слова по которым как пирог должен быть разрезан на куски столбец, а эти куски размещены по листам с названием контрольного слова.В приложеном мной файле роль контрольных слов выполняют название фруктов. А роль текста в столбе выполняет название сортов фруктов. Как и в примере в тесте содержаться в разнабой Пустые сроки.
Цвет не какого отношения к делению на листы не имеет. В лист 1 размещается в один столбик текст (столб А), который вставляется из документа word. В строках этого столба содержаться контрольные слова по которым как пирог должен быть разрезан на куски столбец, а эти куски размещены по листам с названием контрольного слова.В приложеном мной файле роль контрольных слов выполняют название фруктов. А роль текста в столбе выполняет название сортов фруктов. Как и в примере в тесте содержаться в разнабой Пустые сроки.Driven2002
Подскажите как сделать так чтобы при работе кода в случае нахождения второго аналогичного повторения текст добовлялся ниже уже скапированых данных?Driven2002
Добрый день! подскажите, не могу понять почему почему этот код то копирует выбранный диапазон в заданный столбец 1 раз, то копирует один и тот же диапазон несколько раз. как сделать так что все таки копировался один раз?
Добрый день! подскажите, не могу понять почему почему этот код то копирует выбранный диапазон в заданный столбец 1 раз, то копирует один и тот же диапазон несколько раз. как сделать так что все таки копировался один раз?