Vba excel событие удаления строки

Обновлено: 07.07.2024

Предположу, что почти каждый сталкивался с ситуацией, когда необходимо удалить только определенные строки: имеется большая таблица и необходимо удалить из неё только те строки, которые содержат какое-то слово (цифру, фразу). Для выполнения подобной задачи можно воспользоваться несколькими способами.

Способ первый:
Использовать встроенное средство Excel - фильтр. Сначала его необходимо "установить" на листе:

  • Выделяем таблицу с данными, включая заголовки. Если их нет - то выделяем с самой первой строки таблицы, в которой необходимо удалить данные
  • устанавливаем фильтр:
    • для Excel 2003 : Данные-Фильтр-Автофильтр
    • для Excel 2007-2010 : вкладка Данные (Data) -Фильтр (Filter)(или вкладка Главная (Home) -Сортировка и фильтр (Sort&Filter) -Фильтр (Filter) )

    Теперь выбираем условие для фильтра:

    • в Excel 2003 надо выбрать Условие и в появившейся форме выбрать непосредственно условие("равно", "содержит", "начинается с" и т.д.), а напротив значение в соответствии с условием.
    • Для 2007-2010 Excel нужно выбрать Текстовые фильтры (Text Filters) и либо сразу выбрать одно из предлагаемых условий, либо нажать Настраиваемый фильтр (Custom Filter) и ввести значения для отбора в форме

    После этого удалить отфильтрованные строки. В 2007 Excel могут возникнуть проблемы с удалением отфильтрованных строк, поэтому рекомендую сначала так же прочитать статью: Excel удаляет вместо отфильтрованных строк - все?! Как избежать.


    Способ второй:
    применить код VBA, который потребует только указания значения, которое необходимо найти в строке и номер столбца, в котором искать значение.

    Если значение sSubStr не будет указано, то будут удалены строки, ячейки указанного столбца которых, пустые.
    Данный код необходимо поместить в стандартный модуль. Вызвать с листа его можно нажатием клавиш Alt + F8 , после чего выбрать Del_SubStr и нажать Выполнить. Если в данном коде в строке
    If -(InStr(Cells(li, 1), sSubStr) > 0) = lMet Then
    вместо = lMet указать <> lMet , то удаляться будут строки, не содержащие указанное для поиска значение. Иногда тоже удобно.
    Но. Данный код просматривает строки на предмет частичного совпадения указанного значения. Например, если Вы укажете текст для поиска "отчет", то будут удалены все строки, в которых встречается это слово("квартальный отчет", "отчет за месяц" и т.д.). Это не всегда нужно. Поэтому ниже приведен код, который будет удалять только строки, указанные ячейки которых равны конкретно указанному значению:

    Здесь так же, как и в случае с предыдущим кодом можно заменить оператор сравнения( Cells(li, lCol) = sSubStr ) с равно на неравенство( Cells(li, lCol) <> sSubStr ) и тогда удаляться будут строки, значения ячеек которых не равно указанному.

    УДАЛЕНИЕ СТРОК НА ОСНОВАНИИ СПИСКА ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
    Иногда бывают ситуации, когда необходимо удалить строки не по одному значению, а по нескольким. Например, если строка содержит или Итог или Отчет. Ниже приведен код, при помощи которого можно удалить строки, указав в качестве критерия диапазон значений.
    Значения, которые необходимо найти и удалить перечисляются на листе с именем "Лист2". Т.е. указав на "Лист2" в столбце А(начиная с первой строки) несколько значений - они все будут удалены. Если лист называется иначе(скажем "Соответствия") в коде необходимо будет "Лист2" заменить на "Соответствия". Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.

    Чтобы код выше удалял строки не по точному совпадению слов, а по частичному(например, в ячейке записано "Привет, как дела?", а в списке есть слово "привет" - надо удалить, т.к. есть слово "привет"), то надо строку:

    If CStr(arr(li, 1)) = sSubStr Then

    заменить на такую:

    If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

    УДАЛЕНИЕ ИЗ ЛИСТА СТРОК, КОТОРЫХ НЕТ В СПИСКЕ ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
    Т.к. в последнее время стало поступать все больше и больше вопросов как не удалять значения по списку, а наоборот - оставить в таблице только те значения, которые перечислены в списке - решил дополнить статью и таким кодом.
    Значения, которые необходимо оставить перечисляются на листе с именем "Лист2". Т.е. указав на "Лист2" в столбце А(начиная с первой строки) несколько значений - после работы кода на листе будут оставлены только те строки, в которых присутствует хоть одно из перечисленных в списке значений. Если лист называется иначе(скажем "Соответствия") в коде необходимо будет "Лист2" заменить на "Соответствия". Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.
    В отличие от приведенных выше кодов, данный код ориентирован на то, что значения в списке указаны не полностью. Т.е. если необходимо оставить только те ячейки, в которых встречается слово "активы", то в списке надо указать только это слово. В этом случае если в ячейке будет записана фраза "Нематериальные активы" или "Активы сторонние" - эти ячейки не будут удалены, т.к. в них встречается слово "активы". Регистр букв при этом неважен.

    Чтобы код выше сравнивал значения таблицы со значениями списка по точному совпадению слов, а не по частичному, то надо строку:

    If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

    заменить на такую:

    If CStr(arr(li, 1)) = sSubStr Then

    Для всех приведенных кодов можно строки не удалять, а скрывать. Для этого надо строку:

    If Not rr Is Nothing Then rr.EntireRow.Delete

    заменить на такую:

    If Not rr Is Nothing Then rr.EntireRow.Hidden = True

    По умолчанию все коды начинают просмотр строк с первой по последнюю заполненную на листе. И если необходимо удалять строки не с первой или не по последнюю, то надо внести корректировки в эту строку:

    For li = 1 To lLastRow 'цикл с первой строки до конца

    1 - это первая строка; lLastRow - определяется автоматически кодом и равна номеру последней заполненной строки на листе. Если надо начать удалять строки только с 7-ой строки(например, в первых 6-ти шапка), то код будет выглядеть так:

    Как программно в Excel-е отловить УДАЛЕНИЕ строк(и) ?
    Как программно в Excel-е отловить УДАЛЕНИЕ строк(и) пользователем ?


    Отловить удаление строки DGV по клавише DEL
    Привет, при нажатии клавиши del удаляется выбранная строка. Как контролировать этот процесс? If.

    Удаление строк в Excel на VBA.
    Прошу помощи у специалистов. Есть массив (2 столбца) на одном листе. Со временем в одном столбце.

    Excel, VBA- Удаление группы Shape-ов
    На листе много Shape-ов. кажди, создается программно и располагается прямо по центру определенной.

    ИМХО больной вопрос. Красиво сделать ЭТО мне пока не удалось :-( Ну хорошо, пусть не слишком красиво. С вставкой ещё куда ни шло: проверю все ячейки строки на empty. А вот как с удалением выкручиваться? Есть идеи гарантированно установить факт события? А почему не защита листа?
    Пара кнопок на понели (своей) добавить строку и удалить строку.
    Причем в этом случаее не надо ломать голову какую строку пользователь добавляет. В этом случае придётся контролировать действия юзера и в других, не интересующих меня зонах, а это ненужный код, время. Или я чего-то не вижу? Опять же ИМХО, если юэаем Excel XP, то можно защитить листь от вставки строк, а остальное как бы не защищать. Я заранее не знаю чего там юзеры будут юзать . Потому не коррект. Тебя интересует только сам факт вставки или удаления строки?
    Если да, то проблему можно решить! Я решил проблему путём пересчёта кол-ва строк таблицы по событию CHANGE. Есть решение красивее?

    2SlavaRus: вы пишите: 'Если да, то проблему можно решить!'. КАК? Поделитесь.

    Итак, что имеем:
    1. Удалить из меню пункты вставки/удаления насовсем.
    2. Подменить их на 'свои'.
    3. Через BeforeRightClick запретить popup-меню на листе.
    4. Манипуляции с защитой листа.
    5. Манипуляции с формулами листа.
    6. Использование таймера.

    Однако, последними двумя способами не предотвратить вставку/удаление - можно только отследить её пост-фактум.

    Получается, что выбор пункта меню отловить можно, но его нажатие никаких мессаджей не посылает. Ничего удивительного - просто это тупиковый путь. Если запрещать (через сабклассинг) то, что можем отлавливать (а по-другому и никак), то получится, что будем запрещать нажатие пункта меню. А тогда возникает резонный вопрос: на фига это делать через сабклассинг, когда и так можно?


    В Excel, чтобы удалить любую строку, у нас есть сочетание клавиш CTRL + - или мы можем выбрать строку и щелкнуть по ней правой кнопкой мыши и удалить ее. Но в VBA мы сделали это, написав код для этого. Метод удаления строки в VBA заключается в том, что сначала нам нужно определить, какую строку удалить, а затем мы можем ее удалить. В этой статье мы узнаем о различных иллюстрациях о том, как удалить строку в VBA.

    В VBA Удалить строку используется для удаления либо набора строк, либо отдельной строки в зависимости от ситуации. Подобно листу Excel, мы можем использовать макросы или VBA для удаления строк в листе Excel. Это помогает, когда у нас много данных, и мы не можем сделать это вручную.

    Синтаксис для удаления строки в Excel VBA

    Синтаксис для удаления строки в Excel, как показано ниже.

    Есть также другие методы удаления строк с использованием VBA, такие как следующие.

    Range ( «Cell»). EntireRow.Delete

    То, что будет делать вышеприведенный оператор, - это удаление строки для данной строки. Например, если мы напишем Range («A1»). FullRow.Delete, то первая строка будет удалена, так как ячейка A1 принадлежит первой строке.

    Также мы можем использовать Rows (row_num) .delete для удаления строки.

    Как удалить строку в Excel, используя VBA?

    Ниже приведены некоторые примеры того, как удалить строку в Excel с помощью VBA.

    Вы можете скачать этот шаблон VBA Удалить строку Excel здесь - VBA Удалить шаблон Excel строку

    VBA Delete Row - Пример № 1

    Давайте используем первый простой метод для удаления строк. Для демонстрации я введу случайное значение в ячейки A1 и B1. Посмотрите на это ниже.


    Что я хочу видеть, так это то, что если я буду использовать код, написанный выше, вся строка будет удалена или будет удалена одна ячейка.

    Примечание. Для использования Excel VBA необходимо включить вкладку разработчика на вкладке «Файлы» в разделе параметров.

    Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.

    Шаг 1. Перейдите на вкладку разработчика, щелкните Visual Basic, чтобы открыть редактор VBA.


    Шаг 2: В сегменте кода объявите подфункцию, чтобы начать писать код.

    Код:


    Шаг 3: Теперь напишите следующий код, чтобы удалить строку.

    Код:


    Шаг 4: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.

    Запустив код, мы увидим, что значения из ячеек A1 и B1 удаляются, поскольку вся первая строка была удалена.

    VBA Delete Row - Пример № 2

    Ранее в первом примере я удалил только одну строку. Но что делать, если нам нужно удалить несколько строк? Для демонстрации, у меня есть следующие данные, как показано ниже,


    Я хочу удалить все первые пять строк. Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.

    Шаг 1. На вкладке разработчика щелкните Visual Basic, чтобы открыть редактор VBA.

    Шаг 2: В коде объявите подфункцию, чтобы начать писать код,

    Код:


    Шаг 3: Напишите следующий код, показанный ниже, чтобы удалить все пять строк.

    Код:


    Шаг 4: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.

    Как только мы запустим код, мы увидим следующий результат: все данные были удалены, что означает, что первые пять строк были удалены, поскольку у нас были данные в первых пяти строках.

    Примечание: я вставлю данные обратно в образец листа Excel для демонстрации.

    VBA Delete Row - Пример № 3

    Теперь у нас есть данные о сотрудниках, и их продажи осуществляются за три месяца: январь, февраль и март. Один из сотрудников был в отпуске и не мог заниматься продажей в течение трех месяцев, поэтому камеры для него пусты. Наша цель - найти эту пустую строку и удалить ее из данных.

    Посмотрите на данные ниже,


    Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.

    Шаг 1. На вкладке разработчика щелкните Visual Basic, чтобы открыть редактор Visual Basic.

    Шаг 2: Объявите подфункцию в окне кода, чтобы начать писать код,

    Код:


    Шаг 3: Напишите следующий код, чтобы удалить строки с пустыми ячейками.

    Код:


    SpecialCells - это функция в VBA, которая возвращает нам все ячейки, которые соответствуют нашим условиям, и нашим условием были пустые ячейки в этом диапазоне, поэтому мы использовали функцию xlCellTypeBlanks.

    Шаг 4: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.

    Запустив код, мы увидим, что строка с пустыми ячейками была удалена.

    Примечание: я снова вставлю данные в образец листа Excel для демонстрации.

    VBA Delete Row - Пример № 4

    Существуют и другие подобные методы удаления строк, например, использование строк и функция удаления. Например, у нас есть данные в строке 4, и я хочу удалить строку 4. Мы можем дать команду Excel для удаления 4- й строки в данных. Посмотрите на скриншот ниже. У меня есть случайные данные в строке 4 в первой ячейке.


    Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.

    Шаг 1. Откройте редактор VBA, щелкнув Visual Basic на вкладке разработчика.

    Шаг 2: Объявите подфункцию, чтобы начать писать код.

    Код:


    Шаг 3: Напишите следующий код для удаления 4-й строки.

    Код:


    Шаг 4: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.

    Данные были удалены, так как 4- я строка была удалена сама.

    VBA Delete Row - Пример № 5

    В приведенном выше коде мы дали диапазон или строку для удаления в самом коде. Теперь давайте примем ввод от пользователя, и он может удалить строку из заданных данных. Например, у меня есть данные о сотрудниках и продажах, как показано ниже, и я хочу, чтобы пользователь выбрал диапазон, из которого пользователь хочет удалить строки с пустыми ячейками. Посмотрите на данные ниже,


    Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.

    Шаг 1: Откройте VB Editor, нажав Visual Basic на вкладке разработчика,

    Шаг 2: Объявите подфункцию, чтобы начать писать код.

    Код:


    Шаг 2: Объявите две переменные как диапазон, A и B.

    Код:


    Шаг 3: Чтобы принять ввод от пользователя для выбора диапазона, который нужно удалить, мы будем использовать функцию поля ввода и сохраним этот ввод в переменной, определенной выше.

    Код:


    Шаг 4: Установите B = A, чтобы ввод от пользователя можно было сохранить в диапазоне B.

    Код:


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

    Код:


    Шаг 6: Теперь запустите код с помощью кнопки запуска.


    Шаг 6: Появляется поле ввода.


    Шаг 7: Выберите диапазон от A1: D8 в этом примере. Нажмите OK, чтобы увидеть результат.


    Данные с пустыми ячейками были удалены.


    То, что нужно запомнить

    Есть несколько вещей, которые мы должны помнить об удалении строки в Excel VBA:

    • Мы можем удалить строку на основе одной ячейки.
    • Мы можем удалить несколько строк, задав диапазон ячеек.
    • Мы также можем удалять строки, принимая данные от пользователя.

    Рекомендуемые статьи

    Это был путеводитель по VBA Delete Row. Здесь мы обсудили, как удалить строку в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

    Предположу, что почти каждый сталкивался с ситуацией, когда необходимо удалить только определенные строки: имеется большая таблица и необходимо удалить из неё только те строки, которые содержат какое-то слово (цифру, фразу). Для выполнения подобной задачи можно воспользоваться несколькими способами.

    Способ первый:
    Использовать встроенное средство Excel - фильтр. Сначала его необходимо "установить" на листе:

    • Выделяем таблицу с данными, включая заголовки. Если их нет - то выделяем с самой первой строки таблицы, в которой необходимо удалить данные
    • устанавливаем фильтр:
      • для Excel 2003 : Данные-Фильтр-Автофильтр
      • для Excel 2007-2010 : вкладка Данные (Data) -Фильтр (Filter)(или вкладка Главная (Home) -Сортировка и фильтр (Sort&Filter) -Фильтр (Filter) )

      Теперь выбираем условие для фильтра:

      • в Excel 2003 надо выбрать Условие и в появившейся форме выбрать непосредственно условие("равно", "содержит", "начинается с" и т.д.), а напротив значение в соответствии с условием.
      • Для 2007-2010 Excel нужно выбрать Текстовые фильтры (Text Filters) и либо сразу выбрать одно из предлагаемых условий, либо нажать Настраиваемый фильтр (Custom Filter) и ввести значения для отбора в форме

      После этого удалить отфильтрованные строки. В 2007 Excel могут возникнуть проблемы с удалением отфильтрованных строк, поэтому рекомендую сначала так же прочитать статью: Excel удаляет вместо отфильтрованных строк - все?! Как избежать.


      Способ второй:
      применить код VBA, который потребует только указания значения, которое необходимо найти в строке и номер столбца, в котором искать значение.

      Если значение sSubStr не будет указано, то будут удалены строки, ячейки указанного столбца которых, пустые.
      Данный код необходимо поместить в стандартный модуль. Вызвать с листа его можно нажатием клавиш Alt + F8 , после чего выбрать Del_SubStr и нажать Выполнить. Если в данном коде в строке
      If -(InStr(Cells(li, 1), sSubStr) > 0) = lMet Then
      вместо = lMet указать <> lMet , то удаляться будут строки, не содержащие указанное для поиска значение. Иногда тоже удобно.
      Но. Данный код просматривает строки на предмет частичного совпадения указанного значения. Например, если Вы укажете текст для поиска "отчет", то будут удалены все строки, в которых встречается это слово("квартальный отчет", "отчет за месяц" и т.д.). Это не всегда нужно. Поэтому ниже приведен код, который будет удалять только строки, указанные ячейки которых равны конкретно указанному значению:

      Здесь так же, как и в случае с предыдущим кодом можно заменить оператор сравнения( Cells(li, lCol) = sSubStr ) с равно на неравенство( Cells(li, lCol) <> sSubStr ) и тогда удаляться будут строки, значения ячеек которых не равно указанному.

      УДАЛЕНИЕ СТРОК НА ОСНОВАНИИ СПИСКА ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
      Иногда бывают ситуации, когда необходимо удалить строки не по одному значению, а по нескольким. Например, если строка содержит или Итог или Отчет. Ниже приведен код, при помощи которого можно удалить строки, указав в качестве критерия диапазон значений.
      Значения, которые необходимо найти и удалить перечисляются на листе с именем "Лист2". Т.е. указав на "Лист2" в столбце А(начиная с первой строки) несколько значений - они все будут удалены. Если лист называется иначе(скажем "Соответствия") в коде необходимо будет "Лист2" заменить на "Соответствия". Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.

      Чтобы код выше удалял строки не по точному совпадению слов, а по частичному(например, в ячейке записано "Привет, как дела?", а в списке есть слово "привет" - надо удалить, т.к. есть слово "привет"), то надо строку:

      If CStr(arr(li, 1)) = sSubStr Then

      заменить на такую:

      If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

      УДАЛЕНИЕ ИЗ ЛИСТА СТРОК, КОТОРЫХ НЕТ В СПИСКЕ ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
      Т.к. в последнее время стало поступать все больше и больше вопросов как не удалять значения по списку, а наоборот - оставить в таблице только те значения, которые перечислены в списке - решил дополнить статью и таким кодом.
      Значения, которые необходимо оставить перечисляются на листе с именем "Лист2". Т.е. указав на "Лист2" в столбце А(начиная с первой строки) несколько значений - после работы кода на листе будут оставлены только те строки, в которых присутствует хоть одно из перечисленных в списке значений. Если лист называется иначе(скажем "Соответствия") в коде необходимо будет "Лист2" заменить на "Соответствия". Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.
      В отличие от приведенных выше кодов, данный код ориентирован на то, что значения в списке указаны не полностью. Т.е. если необходимо оставить только те ячейки, в которых встречается слово "активы", то в списке надо указать только это слово. В этом случае если в ячейке будет записана фраза "Нематериальные активы" или "Активы сторонние" - эти ячейки не будут удалены, т.к. в них встречается слово "активы". Регистр букв при этом неважен.

      Чтобы код выше сравнивал значения таблицы со значениями списка по точному совпадению слов, а не по частичному, то надо строку:

      If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

      заменить на такую:

      If CStr(arr(li, 1)) = sSubStr Then

      Для всех приведенных кодов можно строки не удалять, а скрывать. Для этого надо строку:

      If Not rr Is Nothing Then rr.EntireRow.Delete

      заменить на такую:

      If Not rr Is Nothing Then rr.EntireRow.Hidden = True

      По умолчанию все коды начинают просмотр строк с первой по последнюю заполненную на листе. И если необходимо удалять строки не с первой или не по последнюю, то надо внести корректировки в эту строку:

      For li = 1 To lLastRow 'цикл с первой строки до конца

      1 - это первая строка; lLastRow - определяется автоматически кодом и равна номеру последней заполненной строки на листе. Если надо начать удалять строки только с 7-ой строки(например, в первых 6-ти шапка), то код будет выглядеть так:

      Цель: в таблице разрешить пользователям выбирать строки (строки, в которых находится SELECTION), нажать короткий отрезок и удалить эти строки. Независимо от того, фильтруются ли они, а выбор находится в непересекающихся диапазонах или нет.

      У меня есть код ниже, который я получил с другого сайта и изменил его:

      Проблемы, которые я получаю, варьируются: от ошибки времени выполнения 1004: переместить ячейки в отфильтрованном диапазоне или таблицу, чтобы удалить метод clase (или что-то, это происходит реже, чем первый)

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

      Я думаю, у вас здесь есть пара вопросов, но наверняка, что может показаться противоречивым.

      При программном удалении нескольких непоследовательных строк/столбцов/ячеек/областей лучше всего сделать это в обратном порядке.

      Когда вы удаляете строку, Excel сдвигает строки под ней. Поэтому последующие номера строк легко путаются, вызывая ошибки или, что еще хуже, непреднамеренно потерянные данные.

      пример

      Представьте, что вы хотите удалить строки 1, 4, 5 and 7 . Если вы удаляете их по одному за раз, начиная с вершины, то вы удаляете строку 1 , которая позволяет номерам других строк удалять 3, 4 and 6 . Удалите 3 и теперь вам нужно удалить 3 and 5 .

      Чтобы удалить строки 1, 4, 5 and 7 одному, начиная сверху, вам действительно нужно удалить строки 1, 3, 3, and 4 (да, вы бы дважды удалили строку 3 ).

      Есть несколько способов обойти это:

      Удалите все строки сразу. Вы можете присоединиться к каждой из выбранных строк с помощью метода Union а затем удалить весь диапазон в одном.

      Или, мои предпочтения:

      Перемещайтесь по строкам назад, начиная с нижней части данных и прокладывая себе путь вверх. Так как For..Each петля не может быть For..Each в обратном направлении, вам нужно переключиться на For..Next .

      Вы можете найти последнюю заполненную строку (используя столбец A в моем примере) с свойством Range.End , а затем использовать метод Intersect для сравнения каждой строки с пользователем. .Selection строк и/или ячеек. Если они пересекаются, то вы можете. .Delete строку.

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

      Читайте также: