Страницы: 1
RSS
Удаление группировки с содержимым
 
Добрый вечер.
Нужно удалить группировки (от 1 до 5 уровня группировки) из прайса.
Выделить строку, и удалить все данные со всеми вложениями сразу.
Вар-т:
Выделить строку группировки --- Del  (удаляет первую строку, без вложения)--- Данные - Разгруппировать. (Не работает!)
Пример во вложении:
строку 7 (01 Ноутбуки, ультрабуки, нетбуки) оставить!
строку 274 (02 Интернет-планшет) с вложениями удалить!
Вопрос № 2
Удалить 2-й уровень группировки в 01 Ноутбуки, ультрабуки, нетбуки --- строку  251(01.06 Аксессуары к ноутбукам) со всеми вложениями.

Пример во вложении
Изменено: IvankoSusanin - 12.01.2014 03:02:42
 
А Вы просто файл выложить не можете? Без всяких заморочек где требуют еще какую то авторизацию? Ваш прайс требует авторизации.
Изменено: gling - 11.01.2014 23:18:47
 
Цитата
А Вы просто файл выложить не можете?
Он достаточно большой, с вложениями не вписывается в стандарт 100Кб.
Исправил!
Изменено: IvankoSusanin - 12.01.2014 03:03:02
 
Удаляет с активной ячейки вниз до 457, при группировке от 5 и ниже :D
Код
iRow = ActiveCell.Row
For iRow = ActiveCell.Row To 457
If Rows(iRow).OutlineLevel < 5 Then 
Rows(iRow).Delete
End If
Next
 
Если очень захотеть - можно в космос полететь ;)
 
Цитата
iRow = ActiveCell.Row For iRow = ActiveCell.Row To 457 If Rows(iRow).OutlineLevel < 5 Then Rows(iRow).Delete End If Next
Не могу запустить!
 
Почему не можете?
 
Захожу в VBA / создаю Module / Вставляю код / Сохраняю.
Захожу в документ / Макрос / не могу запустить (нет макроса).
 
Цитата
  • Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
  • Любой макрос должен заканчиваться оператором End Sub.
  • Все, что находится между Sub и End Sub - тело макроса, т.е. команды, которые будут выполняться при запуске макроса.
Вы бы хоть азы почитали в разделе "Приемы"...
 
Макрос запустил! Но работает он некорректно, оставляет после себя кучу мусора!
Что бы увидеть это, нужно нажать на 2-5 уровни группировки.
Изменено: IvankoSusanin - 12.01.2014 03:04:24
 
Цитата
Но работает он некорректно,
Исправил, теперь точно удаляется от активной ячейки до конца таблицы, при условии вхождения в группировку до 5

Код
Sub test()
For iRow = Cells(Rows.Count, 4).End(xlUp).Row To ActiveCell.Row Step -1
If Rows(iRow).OutlineLevel < 5 Then
Rows(iRow).Delete
End If
Next
End Sub
 
Если очень захотеть - можно в космос полететь ;)
 
Цитата
lexey_fan
Спасибо за помощь!

Я конечно, извиняюсь! Но не работает у меня этот макрос так как нужно.
Удаляет информацию с 1 -го уровня вложения группировки, и все!
Но во 2-3-4-5 уровнях вложения группировки, все категории и товары остаются!
Что бы увидеть это, нужно нажать на  2-3-4-5 уровни вложения группировки.

Цитата
от активной ячейки до конца таблицы
Удалять все до конца, нельзя! В примере указаны две группировки, а в основном документе их 30.
Как тогда удалить выборочно: Например 25/7/8/10 группировки со всеми вложениями (5-ю уровнями группировки) ?

Или как осуществить выборочное удаление с разных слоев/вложений группировки?
Цитата
Вопрос № 2
Удалить 2-й уровень группировки в 01 Ноутбуки, ультрабуки, нетбуки --- строку 251(01.06 Аксессуары к ноутбукам) со всеми вложениями.
 
Принцип: Если активная ячейка находится в первом уровне группировки, то ищем окончание этой группы, т.е следующую группу первого уровня, и удаляем от активной ячейки до конца именно текущей группы  :D  
Код
Sub test()
If Rows(ActiveCell.Row).OutlineLevel = 1 Then n = ActiveCell.Row Else Exit Sub
For i = n To 345
If i <> n Then
If Rows(i).OutlineLevel = 1 Or Cells(i, 4) = "" Then GoTo mska ' определяется конец области удаления (1 группа либа пустая строка)
End If
Next
mska:
For irow = i - 1 To n Step -1
Rows(irow).Delete
Next
End Sub


вопрос 2
у далит подгруппу Ультрабуки при условии что активная ячейка была на "01 Ноутбуки, ультрабуки, нетбуки " перед запуском
Код
Sub test1()
Z = 2 'Номер группы во 2 группировке
If Rows(ActiveCell.Row).OutlineLevel = 1 Then n = ActiveCell.Row Else Exit Sub
c = 1
For ii = n To 345
If Rows(ii).OutlineLevel = 2 Then
If c = Z Then
n = ii
GoTo mask1
Else
c = c + 1
End If
End If
Next
mask1:
For i = ii To 345
If i <> ii Then
If Rows(i).OutlineLevel <= 2 Or Cells(i, 4) = "" Then GoTo mska ' определяется конец области удаления
End If
Next
mska:
For irow = i - 1 To n Step -1
Rows(irow).Delete
Next
End Sub
 
Изменено: lexey_fan - 13.01.2014 00:59:09 (ошибка)
Если очень захотеть - можно в космос полететь ;)
 
Цитата
lexey_fan
спасибо !  :)
Изменено: sportsmen - 13.01.2014 22:24:22
 
Цитата
lexey_fan
Спасибо!
Вариант №1 РЕШЕНО работает отлично!
Код
Sub test()
If Rows(ActiveCell.Row).OutlineLevel = 1 Then n = ActiveCell.Row Else Exit Sub
For i = n To 345
If i <> n Then
If Rows(i).OutlineLevel = 1 Or Cells(i, 4) = "" Then GoTo mska ' определяется конец области удаления (1 группа либа пустая строка)
End If
Next
mska:
For irow = i - 1 To n Step -1
Rows(irow).Delete
Next
End Sub
ps:  вместо 345 указываем, номер строки до какой нужно удалить информацию
*только первый уровень группировки.

Вариант №2
Возникли вопросы:

 
Код
Sub test1()
Z = 2 'Номер группы во 2 группировке
If Rows(ActiveCell.Row).OutlineLevel = 1 Then n = ActiveCell.Row Else Exit Sub
c = 1
For ii = n To 345
If Rows(ii).OutlineLevel = 2 Then
If c = Z Then
n = ii
GoTo mask1
Else
c = c + 1
End If
End If
Next
mask1:
For i = ii To 345
If i <> ii Then
If Rows(i).OutlineLevel <= 2 Or Cells(i, 4) = "" Then GoTo mska ' определяется конец области удаления
End If
Next
mska:
For irow = i - 1 To n Step -1
Rows(irow).Delete
Next
End Sub
 

Код
Z = 2 'Номер группы во 2 группировке
Здесь указываем номер группировки ОТкуда удалять от 1-5?
Код
For ii = n To 345
Здесь указываем  строку ОТкуда удалять?

Код
For i = ii To 345
Здесь указываем  строку ДОкуда удалять?

Код
If Rows(i).OutlineLevel <= 2 Or Cells(i, 4) = "" Then GoTo mska ' определяется конец области удаления
Вместо 2 указываем номер группировки ДОкуда удалять от 1-5?

Правильно я понял?
 
Цитата
ps: вместо 345 указываем, номер строки до какой нужно удалить информацию
Укажите

Код
Cells(Rows.Count, 4).End(xlUp).Row-1  'последняя заполненная ячейка
 
"Z = 2" это номер подгруппы: 2.2(во втором уровне группировки 2 по счёту, а группировка указана вот тут

Код
If Rows(ii).OutlineLevel = 2 Then 
и

Код
If Rows(i).OutlineLevel <= 2 Or Cells(i, 4) = "" Then GoTo mska ' определяется конец области удаления(т.е. если следующая группировка 2 или 1 уровня или конец таблицы)
Где 2 это уровень группировки
Если очень захотеть - можно в космос полететь ;)
 
Вариант №1
Цитата
ps: вместо 345 указываем, номер строки до какой нужно удалить информацию
Укажите

Код

Cells(Rows.Count, 4).End(xlUp).Row-1 'последняя заполненная ячейка
Вы имеете ввиду так:


Код
Sub test()
If Rows(ActiveCell.Row).OutlineLevel = 1 Then n = ActiveCell.Row Else Exit Sub
Cells(Rows.Count, 4).End(xlUp).Row-1  'последняя заполненная ячейка
If i <> n Then
If Rows(i).OutlineLevel = 1 Or Cells(i, 4) = "" Then GoTo mska ' определяется конец области удаления (1 группа либа пустая строка)
End If
Next
mska:
For irow = i - 1 To n Step -1
Rows(irow).Delete
Next
End Sub 
если да! То так не работает!
Изменено: IvankoSusanin - 14.01.2014 20:14:02
 
вот так
Код
 Sub test()
If Rows(ActiveCell.Row).OutlineLevel = 1 Then n = ActiveCell.Row Else Exit Sub
For i = n To Cells(Rows.Count, 4).End(xlUp).Row-1
If i <> n Then
If Rows(i).OutlineLevel = 1 Or Cells(i, 4) = "" Then GoTo mska ' определяется конец области удаления (1 группа либа пустая строка)
End If
Next
mska:
For irow = i - 1 To n Step -1
Rows(irow).Delete
Next
End Sub
Если очень захотеть - можно в космос полететь ;)
 
Цитата
lexey_fan
Спасибо!
Изменено: IvankoSusanin - 15.01.2014 23:28:12
 
Ребята в группировке оставить 1-ую группировки строка, а остальные строки (2, 3, 4, 5 и т.д.) надо удалить. Как быть? Спасибо заранее.
 
Разгруппировать нужное. Или разгруппировать все и сгруппировать нужное
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Читают тему
Наверх