Страницы: 1
RSS
Копирование строк с одинаковыми значениями ячеек на отдельные листы
 
Здравствуйте,

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

Потратил уже 2 часа на поиски. Решил побеспокоить сообщество, за что извиняюсь.
 
STR470S, здрасти.
Код
r = [a1:b18]: l = ""
For i = 2 To UBound(r)
    If l <> r(i, 2) Then
        l = r(i, 2)
        Set SH = Sheets.Add(After:=Sheets(Sheets.Count))
        SH.Name = l
        SH.Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1) = r(i, 1)
    Else
        SH.Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1) = r(i, 1)
    End If
Next
Изменено: Jungl - 05.02.2018 17:20:14 (обновил)
 
Jungl, Большое спасибо!

В результате работы скрипта создаются пустые листы с названиями ID, это я что-то упустил? 8-0
Т. е., без самих строк
Изменено: STR470S - 05.02.2018 17:19:54 (Добавил пример работы с файлом уважаемого Jungl и тот результат, который необходим)
 
Код
Sub RaznestiDannye()
Dim i As Long
Dim n As Long
Dim Criterij As String
Dim iName As String
Dim Sht As Worksheet
Application.ScreenUpdating = False
  Set Sht = ThisWorkbook.Worksheets("Лист1")
        Columns("D").ClearContents
     'отбор уникальных значений столбца B в столбец D
    Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy _
                                  , CopyToRange:=Range("D1"), Unique:=True
     'количество уникальных значений ID
      n = Cells(Rows.Count, "D").End(xlUp).Row
    For i = 2 To n          'цикл по уникальным значениям
        Criterij = Sht.Cells(i, "D")
        iName = Criterij    'имя нового листа
     'создаем новый лист
       Worksheets.Add After:=Worksheets(Worksheets.Count)
     'ставим автофильтр по столбцу B
       Sht.Range("A1:B18").AutoFilter 2, Criterij
     'копируем видимые строки в новый лист
        Sht.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy
        With Worksheets(Worksheets.Count)
          .Range("A1").PasteSpecial xlPasteColumnWidths
          .Range("A1").PasteSpecial xlPasteFormats
          .Range("A1").PasteSpecial xlPasteValues
          Sht.AutoFilter.Range.AutoFilter
          .Name = iName
          .Range("A1").Select
        End With
    Next
        Sht.Columns("D").ClearContents
Application.ScreenUpdating = True
End Sub
Изменено: Kuzmich - 05.02.2018 17:27:27
 
Kuzmich, Jungl, Огромное спасибо за помощь!  :)  
 
Всем привет! Никак не получается переделать код выше таким образом, чтобы при переносе на новые листы учитывался не только один столбец с ИД, но и еще один столбец, назовем его ИД2. Результат, который хотелось бы видеть, прикрепляю.
Изменено: Александр Сомов - 09.10.2022 08:56:22
Страницы: 1
Наверх