Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/удаление объединенных строк - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » удаление объединенных строк (Макросы/Sub)
удаление объединенных строк
grh1 Дата: Среда, 31.08.2022, 10:44 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Добрый день, уважаемые знатоки VBA!
Нужна помощь в написании макроса, который:
1. удаляет строки в которых с 1 по 3 столбец нет записей
2. и если в 5-м столбце стоит прочерк (-) то удалить и верхнюю строку

Имеется макрос, который хорошо отрабатывал, но сейчас к сожалению строки в которых нет записи ОБЪЕДИНЕНЫ и я не могу сообразить как подправить макрос да плюс в нем нет пункта 2.

Файл прикрепляю

Спасибо
К сообщению приложен файл: ___.xlsm(17.0 Kb)


Vadym Gorokh
 
Ответить
СообщениеДобрый день, уважаемые знатоки VBA!
Нужна помощь в написании макроса, который:
1. удаляет строки в которых с 1 по 3 столбец нет записей
2. и если в 5-м столбце стоит прочерк (-) то удалить и верхнюю строку

Имеется макрос, который хорошо отрабатывал, но сейчас к сожалению строки в которых нет записи ОБЪЕДИНЕНЫ и я не могу сообразить как подправить макрос да плюс в нем нет пункта 2.

Файл прикрепляю

Спасибо

Автор - grh1
Дата добавления - 31.08.2022 в 10:44
Kuzmich Дата: Среда, 31.08.2022, 19:38 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 682
Репутация: 150 ±
Замечаний: 0% ±

Excel 2003
grh, к примеру в столбце А объединены строки 5 и 6, в столбцах В и С тоже объединены строки 5 и 6,
а в столбцах F и G эти строки не объединены и что с ними делать, если удалять будем строку 6?
 
Ответить
Сообщениеgrh, к примеру в столбце А объединены строки 5 и 6, в столбцах В и С тоже объединены строки 5 и 6,
а в столбцах F и G эти строки не объединены и что с ними делать, если удалять будем строку 6?

Автор - Kuzmich
Дата добавления - 31.08.2022 в 19:38
grh1 Дата: Среда, 31.08.2022, 23:59 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Kuzmich, я об этом сразу и предупредил...
Имеется макрос, который хорошо отрабатывал, но сейчас к сожалению строки в которых нет записи ОБЪЕДИНЕНЫ

Этот макрос и сейчас присутствует в прикрепленном файле-примере.

Повторю еще раз:
1. если ЗРИТЕЛЬНО пустая строка до столбца F, то удаляем ВСЮ строку (включая не объединенные ячейки);
2. если ЗРИТЕЛЬНО пустая строка до столбца F, да еще плюс мы видим в столбце F ЭТОЙ ЖЕ строки прочерк (-), то удаляем и эту строку и строку выше (в примере Строительный мусор);
3. если есть возможность, подкорректировать номера по порядку, т.к. если удалять как описано в п.2 то нарушается нумерация (при большой таблице проблема).

Файл как есть и НИЖЕ как должно быть прилагаю. Прошу в этом файле обратить внимание на строки удаленные Строительного мусора и окончательную нумерацию слева.

P.S. В качестве ПРИМЕРА в прикрепленном файле удаляются из таблицы следующие строки:

- 6
- 8
- 10
- 12
- 14 и так как в этой строке в столбце F стоит прочерк (-), то удаляется и вышестоящая строка, т.е. 13
- 13
- 16

Так получилось, что удаляются строки четные, но на это нельзя ориентироваться, так как в другой таблице пустые строки могут быть по нечетным.
К сообщению приложен файл: ___3.xlsm(17.3 Kb)


Vadym Gorokh

Сообщение отредактировал grh1 - Четверг, 01.09.2022, 09:23
 
Ответить
СообщениеKuzmich, я об этом сразу и предупредил...
Имеется макрос, который хорошо отрабатывал, но сейчас к сожалению строки в которых нет записи ОБЪЕДИНЕНЫ

Этот макрос и сейчас присутствует в прикрепленном файле-примере.

Повторю еще раз:
1. если ЗРИТЕЛЬНО пустая строка до столбца F, то удаляем ВСЮ строку (включая не объединенные ячейки);
2. если ЗРИТЕЛЬНО пустая строка до столбца F, да еще плюс мы видим в столбце F ЭТОЙ ЖЕ строки прочерк (-), то удаляем и эту строку и строку выше (в примере Строительный мусор);
3. если есть возможность, подкорректировать номера по порядку, т.к. если удалять как описано в п.2 то нарушается нумерация (при большой таблице проблема).

Файл как есть и НИЖЕ как должно быть прилагаю. Прошу в этом файле обратить внимание на строки удаленные Строительного мусора и окончательную нумерацию слева.

P.S. В качестве ПРИМЕРА в прикрепленном файле удаляются из таблицы следующие строки:

- 6
- 8
- 10
- 12
- 14 и так как в этой строке в столбце F стоит прочерк (-), то удаляется и вышестоящая строка, т.е. 13
- 13
- 16

Так получилось, что удаляются строки четные, но на это нельзя ориентироваться, так как в другой таблице пустые строки могут быть по нечетным.

Автор - grh1
Дата добавления - 31.08.2022 в 23:59
Kuzmich Дата: Четверг, 01.09.2022, 12:11 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 682
Репутация: 150 ±
Замечаний: 0% ±

Excel 2003
Потестируйте
[vba]
Код
Sub iMergeCellsDelete()
Dim iBeginRow As Long
Dim iLastRow As Long
Application.DisplayAlerts = False
  iLastRow = Cells(Rows.Count, "G").End(xlUp).Row
  iBeginRow = Columns(1).Find("1", , xlValues, xlWhole).Row
    Range(Cells(iBeginRow, "A"), Cells(iLastRow, "E")).UnMerge
    For i = iLastRow - 1 To iBeginRow Step -1
      If IsEmpty(Cells(i, "E")) And Cells(i, "F") <> "-" Then
        Rows(i).Delete
      Else
        If Cells(i, "F") = "-" Then
          Rows(i).Delete
          Rows(i - 1).Delete
          i = i - 1
        End If
      End If
    Next
     Columns("C").Delete
     Columns("B").AutoFit
       Range("A" & iBeginRow) = 1
       Range("A" & iBeginRow).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
       Step:=1, Stop:=Cells(Rows.Count, "F").End(xlUp).Row - iBeginRow, Trend:=False
Application.DisplayAlerts = True
End Sub
[/vba]
 
Ответить
СообщениеПотестируйте
[vba]
Код
Sub iMergeCellsDelete()
Dim iBeginRow As Long
Dim iLastRow As Long
Application.DisplayAlerts = False
  iLastRow = Cells(Rows.Count, "G").End(xlUp).Row
  iBeginRow = Columns(1).Find("1", , xlValues, xlWhole).Row
    Range(Cells(iBeginRow, "A"), Cells(iLastRow, "E")).UnMerge
    For i = iLastRow - 1 To iBeginRow Step -1
      If IsEmpty(Cells(i, "E")) And Cells(i, "F") <> "-" Then
        Rows(i).Delete
      Else
        If Cells(i, "F") = "-" Then
          Rows(i).Delete
          Rows(i - 1).Delete
          i = i - 1
        End If
      End If
    Next
     Columns("C").Delete
     Columns("B").AutoFit
       Range("A" & iBeginRow) = 1
       Range("A" & iBeginRow).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
       Step:=1, Stop:=Cells(Rows.Count, "F").End(xlUp).Row - iBeginRow, Trend:=False
Application.DisplayAlerts = True
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 01.09.2022 в 12:11
grh1 Дата: Четверг, 01.09.2022, 15:39 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Kuzmich, скачайте файл с моего сообщения № 3, и если вставите туда Ваш код, то пока ничего не получается.

Я подсмотрел код у sboy применил и мне понравилось - всего две строчки.

Сам код:
[vba]
Код
Sub udalenie_strok()
  
    For x = Cells(Rows.Count, 1).End(xlUp).Row To 5 Step -1
        If Cells(x, 4).Value = "" Then Rows(x).Delete
    
    Next x
        
End Sub
[/vba]
Проверьте работу кода в прикрепленном файле 01.

Если добавляю две строчки кода, а именно

[vba]
Код
x = x - 1
    If Cells(x, 5).Value = "-" Then Rows(x - 1).Delete
[/vba]

чтобы удалить строку на одну выше строки, в которой в столбце Е (5) стоит тире.

Получается такой код:

[vba]
Код
Sub udalenie_strok()
  
    For x = Cells(Rows.Count, 1).End(xlUp).Row To 5 Step -1
        If Cells(x, 4).Value = "" Then Rows(x).Delete
        x = x - 1
    If Cells(x, 5).Value = "-" Then Rows(x - 1).Delete

    Next x
        
End Sub
[/vba]

Но в этом случае отрабатывается только код, по удалению вышестоящей строчки где тире.
Что-то неправильно наверно делаю.
Перепробовал ставить эту строку кода и выше и ниже - ничего не получается. Может здесь нужен какой-то цикл или еще что.
Подскажите как прикрутить эти две строчки, чтобы ВСЁ работало.
К сообщению приложен файл: _01.xlsm(17.5 Kb)


Vadym Gorokh

Сообщение отредактировал grh1 - Четверг, 01.09.2022, 15:40
 
Ответить
СообщениеKuzmich, скачайте файл с моего сообщения № 3, и если вставите туда Ваш код, то пока ничего не получается.

Я подсмотрел код у sboy применил и мне понравилось - всего две строчки.

Сам код:
[vba]
Код
Sub udalenie_strok()
  
    For x = Cells(Rows.Count, 1).End(xlUp).Row To 5 Step -1
        If Cells(x, 4).Value = "" Then Rows(x).Delete
    
    Next x
        
End Sub
[/vba]
Проверьте работу кода в прикрепленном файле 01.

Если добавляю две строчки кода, а именно

[vba]
Код
x = x - 1
    If Cells(x, 5).Value = "-" Then Rows(x - 1).Delete
[/vba]

чтобы удалить строку на одну выше строки, в которой в столбце Е (5) стоит тире.

Получается такой код:

[vba]
Код
Sub udalenie_strok()
  
    For x = Cells(Rows.Count, 1).End(xlUp).Row To 5 Step -1
        If Cells(x, 4).Value = "" Then Rows(x).Delete
        x = x - 1
    If Cells(x, 5).Value = "-" Then Rows(x - 1).Delete

    Next x
        
End Sub
[/vba]

Но в этом случае отрабатывается только код, по удалению вышестоящей строчки где тире.
Что-то неправильно наверно делаю.
Перепробовал ставить эту строку кода и выше и ниже - ничего не получается. Может здесь нужен какой-то цикл или еще что.
Подскажите как прикрутить эти две строчки, чтобы ВСЁ работало.

Автор - grh1
Дата добавления - 01.09.2022 в 15:39
Kuzmich Дата: Четверг, 01.09.2022, 15:46 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 682
Репутация: 150 ±
Замечаний: 0% ±

Excel 2003
Примените код в в файле из сообщения 1
 
Ответить
СообщениеПримените код в в файле из сообщения 1

Автор - Kuzmich
Дата добавления - 01.09.2022 в 15:46
grh1 Дата: Четверг, 01.09.2022, 16:01 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Примените код в в файле из сообщения 1


А как сделать в этом коде, чтобы отрабатывался код по тире и удалению строки сверху?


Vadym Gorokh
 
Ответить
Сообщение
Примените код в в файле из сообщения 1


А как сделать в этом коде, чтобы отрабатывался код по тире и удалению строки сверху?

Автор - grh1
Дата добавления - 01.09.2022 в 16:01
grh1 Дата: Четверг, 01.09.2022, 16:45 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
del


Vadym Gorokh

Сообщение отредактировал grh1 - Четверг, 01.09.2022, 16:49
 
Ответить
Сообщениеdel

Автор - grh1
Дата добавления - 01.09.2022 в 16:45
grh1 Дата: Четверг, 01.09.2022, 16:47 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 200
Репутация: 0 ±
Замечаний: 40% ±

2019
Kuzmich, извините я Вас не понял.
В сообщении 1 пример был с лишним столбцом.
Я Ваш код подогнал под таблицу без этого лишнего столбца - всё работает отлично.

Протестирую на большом списке и если что-то не получится - отпишусь.

Спасибо Вам большое.


Vadym Gorokh
 
Ответить
СообщениеKuzmich, извините я Вас не понял.
В сообщении 1 пример был с лишним столбцом.
Я Ваш код подогнал под таблицу без этого лишнего столбца - всё работает отлично.

Протестирую на большом списке и если что-то не получится - отпишусь.

Спасибо Вам большое.

Автор - grh1
Дата добавления - 01.09.2022 в 16:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » удаление объединенных строк (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2022 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!