Vba excel удалить строку

Обновлено: 21.11.2024

Office 365 профессиональный плюс переименовывается в Приложения Microsoft 365 для предприятий. Для получения дополнительной информации об этом изменении прочитайте эту запись в блоге.

Обзор

Microsoft Excel 2002 и более поздние версии Excel удаляют ячейки в цикле "Для каждого. Далее" иначе, чем Microsoft Excel 97 и более ранние версии Excel.

В этой статье описываются различия и приводится пример макроса Visual Basic для приложений, иллюстрирующий удаление ячеек в цикле.

Подробнее

Microsoft предоставляет примеры программирования только для иллюстрации, без явных или подразумеваемых гарантий. Это включает, но не ограничивается, подразумеваемые гарантии товарного состояния или пригодности для конкретной цели. В этой статье предполагается, что вы знакомы с демонстрируемым языком программирования и инструментами, которые используются для создания и отладки процедур. Инженеры службы поддержки Майкрософт могут помочь объяснить функциональность той или иной процедуры. Однако они не будут изменять эти примеры для добавления дополнительных функций или создания процедур в соответствии с вашими конкретными требованиями.

Пример данных

Чтобы использовать макрос из этой статьи, введите на листе следующие образцы данных:

Пример макроса

В новом макромодуле введите следующий макрос.

Поведение примера макроса в Excel 2002 и более поздних версиях Excel

При запуске макроса DeleteCells в Excel 2002 и более поздних версиях Excel удаляются только строки 3, 6 и 8. Хотя строки 4 и 9 содержат «x» в столбце A, макрос не удаляет строки. Результаты макроса следующие:

Когда Microsoft Excel удаляет строку 3, все ячейки перемещаются на одну строку вверх. Например, ячейка A3 предполагает содержимое ячейки A4, ячейка A4 предполагает содержимое ячейки A5 и так далее. После «Для каждого». Следующий цикл оценивает ячейку, он оценивает следующую ячейку; поэтому при смещении ячеек они могут быть пропущены циклом.

Поведение примера макроса в Microsoft Excel 5.0 и Microsoft Excel 7.0

При запуске макроса DeleteCells в Excel 5.0 и Excel 7.0 макрос удаляет все строки, содержащие "x". Результаты макроса следующие:

При удалении строки 3 все ячейки перемещаются на одну строку вверх. Затем ячейка A3 принимает содержимое ячейки A4, ячейка A4 принимает содержимое ячейки A5 и т. д.

Однако, в отличие от поведения цикла в Excel 2002 и более поздних версиях Excel, когда цикл "Для каждого. Далее" оценивает ячейку в Excel 5.0 и Excel 7.0, цикл повторно оценивает ячейку, если она удалена. в петле. Поэтому ячейки не пропускаются.

Рекомендуемый метод использования цикла для удаления ячеек

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

Результаты этого макроса во всех версиях Excel следующие:

Дополнительный метод использования цикла для удаления ячеек

Это альтернативный метод показанному выше. Этот метод дает такие же результаты.

Добавление и удаление строк является частью повседневных задач при работе с Excel.

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

В этом руководстве я покажу вам, как удалять строки в Excel с помощью VBA (несколько сценариев).

Итак, приступим!

Это руководство охватывает:

Удалить всю строку с помощью VBA

Чтобы удалить всю строку в Excel с помощью VBA, необходимо использовать метод EntireRow.Delete.

Например, если вы хотите удалить всю первую строку на листе, вы можете использовать следующий код:

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

Вы также можете удалить несколько строк, указав эти строки в коде.

Например, приведенный ниже код удалит строки с номерами 1, 5 и 9 на листе:

Приведенный выше код использует ту же логику, где он указывает номера строк, и Excel удалит эти строки одну за другой.

ВАЖНО: когда вы удаляете строки с кодом, подобным приведенному выше, не забывайте начинать удаление снизу, а затем подниматься вверх. Например, если вы начнете сверху и сначала удалите строку 1, все строки ниже нее будут смещены на одну строку вверх, а нумерация будет отключена (поскольку строка 5 станет строкой 4 и т. д.)

Удалить все строки в выделенном фрагменте

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

Приведенный выше код применяется к методу EntireRow.Delete для всей выборки.

Удалить альтернативные строки (или удалить каждую третью/четвертую/N-ю строку)

Иногда вы можете получить дамп данных, в котором каждая вторая строка (или третья, четвертая или N-я строки) бесполезна и должна быть удалена.

Раньше я работал с финансовыми данными, где каждая вторая строка была пустой и ее нужно было удалить.

Это тип сценария, в котором VBA действительно сияет.

Ниже приведен код VBA, который просматривает все строки в выборе и удаляет каждую вторую строку:

Позвольте мне объяснить, как работает этот код VBA.

Во-первых, я использовал переменную RCount, чтобы получить общее количество строк в выборке.

Затем я использовал цикл For Next, чтобы запустить его столько раз, сколько имеется строк. Например, если имеется 12 строк, этот цикл будет выполняться от 12 до 1 (т. е. 12 раз). Важно запускать это от последней строки в выборе к первой, поскольку мы не хотим, чтобы номера строк изменялись при удалении строки.

Кроме того, используется шаг -2, поскольку нам нужно удалить каждую вторую строку (снизу вверх). Если вы хотите удалить каждую третью строку, вы можете использовать -3.

В цикле VBA я использовал метод Selection.Rows(i).EntireRow.Delete для удаления каждой альтернативной строки.

Удалить пустые строки с помощью VBA

Вы также можете использовать метод EntireRow.Delete для удаления всех пустых строк.

Ниже приведен код VBA, который выберет пустые ячейки в выбранном наборе данных и удалит всю строку.

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

Как только эти пустые ячейки идентифицированы с помощью SpecialCell, они затем удаляются с помощью метода EntireRow.Delete.

Примечание. Этот метод выбирает пустые ячейки и не проверяет, пуста ли вся строка. Поэтому, если какая-либо ячейка в строке пуста, это все равно удалит всю строку.

Удалить строки с определенным словом/значением

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

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

Ниже приведен код, который это сделает:

Приведенный выше код сначала подсчитывает общее количество строк в выборке. Это гарантирует, что цикл будет выполняться только это количество раз. Затем он использует цикл «For Next» для просмотра всех ячеек в столбце 2.

Затем оператор IF THEN ELSE используется для проверки значения в каждой ячейке столбца 2. И в случае совпадения значения/текста с указанным текстом (в данном примере это «Принтер»).

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

Примечание. Здесь важно отметить, что цикл выполняется от Selection.Rows.Count до 1, чтобы удаление строки не повлияло на строки над ней.

Как использовать этот код VBA

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

Вам необходимо скопировать и вставить эти коды в модуль в редакторе Excel VB. Скопировав эти коды, вы можете запустить коды макросов.

Ниже приведены шаги по копированию и вставке этих кодов VBA в модуль:

Чтобы запустить эти коды, вы можете поместить курсор в любом месте кода (который вы хотите запустить) и нажать клавишу F5 (или щелкнуть зеленый треугольник на панели инструментов VBA).

Я также написал подробное руководство по различным способам запуска макрокодов VBA в Excel.

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

Итак, это были некоторые коды VBA, которые можно использовать для удаления целых строк в Excel (в разных сценариях). Ту же логику можно применить и в случае, если вы хотите удалить столбцы вместо строк (с соответствующей корректировкой в ​​примерах кода).

У меня есть этот фрагмент кода, который находит строку элемента Excel в списке и удаляет элементы из списка. Что я хочу. также удалить строку Excel.

Код здесь

Куда я добавил ws.Range(Rand,1).EntireRow.Delete, я хочу удалить всю строку, но не знаю, как это сделать. Что я хочу.если он находит то же значение в ячейке, что и в каком-то выбранном элементе моего списка, чтобы иметь возможность удалить как всю строку в excel, так и элемент из списка. Он работает, чтобы удалить элемент из списка, но я также не знаю, как удалить строку

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

Этого пропуска также можно избежать, настроив оператор if на увеличение только в том случае, если строка не удалена.

@Wayne, Совершенно верно! В конце концов «Все дороги ведут в Рим». Ваше решение более элегантно и будет работать быстрее, если нужно удалить много строк. Больше всего меня беспокоило то, что люди знают о проблеме пропуска строк при просмотре файла и удалении строк.

4 ответа 4

Решение, предложенное Крисом Нильсеном, простое и хорошо работает. Чуть короче был бы вариант.

<р>. обратите внимание, что нет необходимости указывать Shift при удалении строки, поскольку сдвиг влево по определению невозможен

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

<р>. в начальном цикле. Затем я использую функцию сортировки, чтобы поместить эти строки в конец данных. Основная причина этого в том, что удаление отдельных строк может быть очень медленной процедурой (если вы удаляете >100). Это также гарантирует, что ничего не будет пропущено, согласно комментарию Роберта Илбринка

Вы можете изучить код для сортировки, записав макрос и сократив код, как показано в этом экспертном видеоролике Excel. У меня есть подозрение, что самый аккуратный метод (Range("A1:Z10").Sort Key1:=Range("A1"), Order1:=xlSortAscending/Descending, Header:=xlYes/No) может быть обнаружен только на предварительном версии Excel 2007 года. но вы всегда можете уменьшить эквивалентный код 2007/2010

Еще пара пунктов. если ваш список еще не отсортирован по столбцу, и вы хотите сохранить порядок, вы можете вставить номер строки «Rand» в свободный столбец справа от каждой строки по мере прохождения. Затем вы бы отсортировали по этому комментарию и удалили его

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

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

VBA удалить столбцы строк Excel — Удалить строки

Мы можем удалить строки, используя метод Delete строки. Дополнительные сведения см. в следующих примерах:

Удаление строк в Excel VBA: примеры

Удалить строки в Excel VBA — Примеры: удаление определенной строки

В следующем примере будет удалена строка 5 из активного листа.

Примеры Excel VBA для удаления нескольких строк за раз

В следующем примере будут удалены строки с 5 по 10 за раз из активного листа.

Примеры VBA для удаления строк на основе определенных условий

В следующем примере будут удалены все строки от 1 до 10, имеющие четное число в первом столбце.

Инструкции
  1. Открыть книгу Excel
  2. Нажмите клавиши ALT + F11, чтобы открыть редактор VBA.
  3. Вставить модуль из меню "Вставка"
  4. Скопируйте приведенный выше код и вставьте его в окно кода.
  5. Сохранить файл как книгу с поддержкой макросов
  6. Нажмите F5, чтобы выполнить его.

Удаление столбцов в Excel VBA

Мы можем удалить столбцы, используя свойство Delete столбцов. В следующих примерах показано, как удалять столбцы в различных ситуациях.

Удаление столбцов в Excel VBA: примеры

Пример удаления определенного столбца с помощью VBA

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

Удаление нескольких столбцов одновременно в Excel с помощью VBA

В этом примере я удаляю столбцы с D по F из активного рабочего листа с помощью VBA.

Удаление столбцов на основе определенных условий в Excel с помощью VBA

В следующем примере будут удалены первые 10 столбцов, если в первой строке есть нечетные числа.

Инструкции
  1. Открыть книгу Excel
  2. Нажмите клавиши ALT + F11, чтобы открыть редактор VBA.
  3. Вставить модуль из меню "Вставка"
  4. Скопируйте приведенный выше код и вставьте его в окно кода.
  5. Сохранить файл как книгу с поддержкой макросов
  6. Нажмите F5, чтобы выполнить его.

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

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