Метод Range.Clear для полной очистки диапазона ячеек из кода VBA Excel. Методы очистки отдельных свойств и их групп в ячейках. Примеры использования.
Методы очистки ячеек
Метод | Очищаемые свойства | Примечание |
---|---|---|
Range.Clear | Почти все свойства | Ширина и высота ячеек не изменяются |
Range.ClearComments | Комментарии | Для Excel в составе Office 365 |
Range.ClearContents | Формулы и значения | Исходное форматирование сохраняется |
Range.ClearFormats | Свойства, задающие форматы | В том числе отмена объединения ячеек |
Range.ClearHyperlinks | Гиперссылки | Текст и форматирование сохраняются |
Range.ClearNotes | Примечания и заметки | Примечания – для локальных программ Excel, заметки – для Excel в составе Office 365 |
Range.ClearOutline | Структура данных | Смотрите, что такое структурирование данных |
Range – выражение, возвращающее диапазон ячеек.
Примеры использования
1. Удаление гиперссылки из ячейки A1
Cells(1, 1).ClearHyperlinks
2. Очистка диапазона A1:L50 от формул и значений
Range("A1:L50").ClearContents
3. Очистка всех свойств ячеек в столбцах A:K
Columns("A:K").Clear
4. Очистка форматирования ячеек в строках 1:20
Rows("1:20").ClearFormats
Методы очистки диапазонов ячеек в VBA Excel возвращают очищаемые свойства ячеек к значениям по умолчанию. К таким, как на вновь созданном стандартном рабочем листе. При любых методах очистки высота строк и ширина столбцов не изменяются.
Фразы для контекстного поиска: очистка ячеек, очистка ячейки, очистка формул, очистка от формул, удаление формул, очистка значений, удаление значений, очистка форматов, удаление форматирования, удаление форматов.
hk1209 Пользователь Сообщений: 271 |
#1 30.01.2014 11:39:19 всем доброго времени суток
спасибо за потраченное драгоценное время Изменено: hk1209 — 30.01.2014 20:05:32 |
||
Hugo Пользователь Сообщений: 23251 |
Чтож Вы с строкой сравниваете дату? Или там тоже строка, а не дата? |
hk1209 Пользователь Сообщений: 271 |
|
wowick Пользователь Сообщений: 972 |
А сравниваете вы ее с ТЕКСТОМ «20.11.2013»… В экселе, как и во-многих других средах программирования в кавычках подразумевает текстовый формат. Если автоматизировать бардак, то получится автоматизированный бардак. |
Sanja Пользователь Сообщений: 14838 |
#5 30.01.2014 11:51:07 Попробуйте так
Согласие есть продукт при полном непротивлении сторон. |
||
Hugo Пользователь Сообщений: 23251 |
То что там дата — это ещё не факт. Видали мы всяких дат… Пока не докажете — не поверю |
hk1209 Пользователь Сообщений: 271 |
#7 30.01.2014 12:32:37 Sanja спасибо за подсказку
долго выполняется |
||
Sanja Пользователь Сообщений: 14838 |
#8 30.01.2014 12:44:02 Для ускорения выполнения кода отключите автоматический пересчет:
в конце процедуры включить:
так определяется
номер последней строки с данными в 9-м столбце:
Изменено: Sanja — 30.01.2014 12:45:13 Согласие есть продукт при полном непротивлении сторон. |
||||||
Hugo Пользователь Сообщений: 23251 |
4. Обрабатывать массивы, а не ячейки — на листе только удалять строки, да и тут можно это делать один раз сразу с группой. P.S.Упустил — Dim rw As Date — это ошибка! Изменено: Hugo — 30.01.2014 12:57:32 |
hk1209 Пользователь Сообщений: 271 |
#10 30.01.2014 13:52:19 Sanja & Hugo спасибо за подсказку и потраченное драгоценное время
Знаю что там не правильно, но не могу понять где именно Изменено: hk1209 — 30.01.2014 20:06:26 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#11 30.01.2014 14:02:46 Cells(Rows.Count, 9).End(xlUp).Row < CDate(«20.11.2013») Hugo совсем иное советовал..
И уже в цикле:
С массивами чуть сложнее в понимании, но на Вашем примере было бы так:
P.S. И оформляйте коды тегами. Значок «<…>» среди кнопок вверху при создании сообщения. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
Hugo Пользователь Сообщений: 23251 |
Супербыстрое удаление строк от ZVI есть тут: http://www.sql.ru/forum/actualthread.aspx?tid=722758 Можно использовать и в этой задаче. |
hk1209 Пользователь Сообщений: 271 |
#13 30.01.2014 14:24:29 The_Prist спасибо за потраченное драгоценное время и советы (включая код) |
In this Article
- Delete Entire Row or Column
- Delete Multiple Rows or Columns
- Delete Blank / Empty Rows
- Delete Row if Cell is Blank
- Delete Row Based on Cell Value
- More Delete Row and Column Examples
- Delete Duplicate Rows
- Delete Table Rows
- Delete Filtered Rows
- Delete Rows in Range
- Delete Selected Rows
- Delete Last Row
- Delete Columns by Number
This tutorial will demonstrate different ways to delete rows and columns in Excel using VBA.
Delete Entire Row or Column
To delete an entire row in VBA use this line of code:
Rows(1).Delete
Notice we use the Delete method to delete a row.
Instead of referencing the Rows Object, you can reference rows based on their Range Object with EntireRow:
Range("a1").EntireRow.Delete
Similarly to delete an entire column, use these lines of code:
Columns(1).Delete
Range("a1").EntireColumn.Delete
Delete Multiple Rows or Columns
Using the same logic, you can also delete multiple rows at once:
Rows("1:3").Delete
or columns:
Columns("A:C").Delete
Notice here we reference the specific row and column numbers / letters surrounded by quotations.
Of course, you can also reference the EntireRow of a range:
Range("a1:a10").EntireRow.Delete
Note: The examples below only demonstrate deleting rows, however as you can see above, the syntax is virtually identically to delete columns.
Delete Blank / Empty Rows
This example will delete a row if the entire row is blank:
Sub DeleteRows_EntireRowBlank()
Dim cell As Range
For Each cell In Range("b2:b20")
If Application.WorksheetFunction.CountA(cell.EntireRow) = 0 Then
cell.EntireRow.Delete
End If
Next cell
End Sub
It makes use of the Excel worksheet function: COUNTA.
Delete Row if Cell is Blank
This will delete a row if specific column in that row is blank (in this case column B):
Range("b3:b20").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Delete Row Based on Cell Value
This will loop through a range, and delete rows if a certain cell value in that row says “delete”.
Sub DeleteRowswithSpecificValue()
Dim cell As Range
For Each cell In Range("b2:b20")
If cell.Value = "delete" Then
cell.EntireRow.Delete
End If
Next cell
End Sub
More Delete Row and Column Examples
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
Delete Duplicate Rows
This code will delete all duplicate rows in a range:
Range("b2:c100").RemoveDuplicates Columns:=2
Notice we set Columns:=2. This tells VBA to check both the first two columns of data when considering if rows are duplicates. A duplicate is only found when both columns have duplicate values.
If we had set this to 1, only the first row would’ve been checked for duplicate values.
Delete Table Rows
This code will delete the second row in a Table by referencing ListObjects.
ThisWorkbook.Sheets("Sheet1").ListObjects("list1").ListRows(2).Delete
Delete Filtered Rows
To delete only rows that are visible after filtering:
Range("b3:b20").SpecialCells(xlCellTypeVisible).EntireRow.Delete
VBA Programming | Code Generator does work for you!
Delete Rows in Range
This code will delete all rows in range:
Range("a1:a10").EntireRow.Delete
Delete Selected Rows
This code will delete all selected rows:
Selection.EntireRow.Delete
Delete Last Row
This will delete the last used row in column B:
Cells(Rows.Count, 2).End(xlUp).EntireRow.Delete
By changing 2 to 1, you can delete the last used row in column A, etc.:
Cells(Rows.Count, 1).End(xlUp).EntireRow.Delete
Delete Columns by Number
To delete a column by it’s number, use a code like this:
Columns (2).Delete
Chris Nielsen’s solution is simple and will work well. A slightly shorter option would be…
ws.Rows(Rand).Delete
…note there is no need to specify a Shift when deleting a row as, by definition, it’s not possible to shift left
Incidentally, my preferred method for deleting rows is to use…
ws.Rows(Rand) = ""
…in the initial loop. I then use a Sort function to push these rows to the bottom of the data. The main reason for this is because deleting single rows can be a very slow procedure (if you are deleting >100). It also ensures nothing gets missed as per Robert Ilbrink’s comment
You can learn the code for sorting by recording a macro and reducing the code as demonstrated in this expert Excel video. I have a suspicion that the neatest method (Range(«A1:Z10»).Sort Key1:=Range(«A1»), Order1:=xlSortAscending/Descending, Header:=xlYes/No) can only be discovered on pre-2007 versions of Excel…but you can always reduce the 2007/2010 equivalent code
Couple more points…if your list is not already sorted by a column and you wish to retain the order, you can stick the row number ‘Rand’ in a spare column to the right of each row as you loop through. You would then sort by that comment and eliminate it
If your data rows contain formatting, you may wish to find the end of the new data range and delete the rows that you cleared earlier. That’s to keep the file size down. Note that a single large delete at the end of the procedure will not impair your code’s performance in the same way that deleting single rows does
- VBA Удалить строку
VBA Удалить строку
В Excel, чтобы удалить любую строку, у нас есть сочетание клавиш CTRL + — или мы можем выбрать строку и щелкнуть по ней правой кнопкой мыши и удалить ее. Но в VBA мы сделали это, написав код для этого. Метод удаления строки в VBA заключается в том, что сначала нам нужно определить, какую строку удалить, а затем мы можем ее удалить. В этой статье мы узнаем о различных иллюстрациях о том, как удалить строку в VBA.
В VBA Удалить строку используется для удаления либо набора строк, либо отдельной строки в зависимости от ситуации. Подобно листу Excel, мы можем использовать макросы или VBA для удаления строк в листе Excel. Это помогает, когда у нас много данных, и мы не можем сделать это вручную.
Синтаксис для удаления строки в Excel VBA
Синтаксис для удаления строки в Excel, как показано ниже.
Worksheets.Rows (Row #). Удалить
Есть также другие методы удаления строк с использованием 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: В сегменте кода объявите подфункцию, чтобы начать писать код.
Код:
Sub Sample () End Sub
Шаг 3: Теперь напишите следующий код, чтобы удалить строку.
Код:
Диапазон Sub Sample () ("A1"). CompleteRow.Delete End Sub
Шаг 4: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Запустив код, мы увидим, что значения из ячеек A1 и B1 удаляются, поскольку вся первая строка была удалена.
VBA Delete Row — Пример № 2
Ранее в первом примере я удалил только одну строку. Но что делать, если нам нужно удалить несколько строк? Для демонстрации, у меня есть следующие данные, как показано ниже,
Я хочу удалить все первые пять строк. Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.
Шаг 1. На вкладке разработчика щелкните Visual Basic, чтобы открыть редактор VBA.
Шаг 2: В коде объявите подфункцию, чтобы начать писать код,
Код:
Sub Sample1 () End Sub
Шаг 3: Напишите следующий код, показанный ниже, чтобы удалить все пять строк.
Код:
Диапазон Sub Sample1 () ("A1: B5"). CompleteRow.Delete End Sub
Шаг 4: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Как только мы запустим код, мы увидим следующий результат: все данные были удалены, что означает, что первые пять строк были удалены, поскольку у нас были данные в первых пяти строках.
Примечание: я вставлю данные обратно в образец листа Excel для демонстрации.
VBA Delete Row — Пример № 3
Теперь у нас есть данные о сотрудниках, и их продажи осуществляются за три месяца: январь, февраль и март. Один из сотрудников был в отпуске и не мог заниматься продажей в течение трех месяцев, поэтому камеры для него пусты. Наша цель — найти эту пустую строку и удалить ее из данных.
Посмотрите на данные ниже,
Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.
Шаг 1. На вкладке разработчика щелкните Visual Basic, чтобы открыть редактор Visual Basic.
Шаг 2: Объявите подфункцию в окне кода, чтобы начать писать код,
Код:
Sub Sample2 () End Sub
Шаг 3: Напишите следующий код, чтобы удалить строки с пустыми ячейками.
Код:
Диапазон Sub Sample2 () ("A1: D5"). SpecialCells (xlCellTypeBlanks) .EntireRow.Delete End Sub
SpecialCells — это функция в VBA, которая возвращает нам все ячейки, которые соответствуют нашим условиям, и нашим условием были пустые ячейки в этом диапазоне, поэтому мы использовали функцию xlCellTypeBlanks.
Шаг 4: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Запустив код, мы увидим, что строка с пустыми ячейками была удалена.
Примечание: я снова вставлю данные в образец листа Excel для демонстрации.
VBA Delete Row — Пример № 4
Существуют и другие подобные методы удаления строк, например, использование строк и функция удаления. Например, у нас есть данные в строке 4, и я хочу удалить строку 4. Мы можем дать команду Excel для удаления 4- й строки в данных. Посмотрите на скриншот ниже. У меня есть случайные данные в строке 4 в первой ячейке.
Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.
Шаг 1. Откройте редактор VBA, щелкнув Visual Basic на вкладке разработчика.
Шаг 2: Объявите подфункцию, чтобы начать писать код.
Код:
Sub Sample3 () End Sub
Шаг 3: Напишите следующий код для удаления 4-й строки.
Код:
Sub Sample3 () Строки (4). Удалить End Sub
Шаг 4: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Данные были удалены, так как 4- я строка была удалена сама.
VBA Delete Row — Пример № 5
В приведенном выше коде мы дали диапазон или строку для удаления в самом коде. Теперь давайте примем ввод от пользователя, и он может удалить строку из заданных данных. Например, у меня есть данные о сотрудниках и продажах, как показано ниже, и я хочу, чтобы пользователь выбрал диапазон, из которого пользователь хочет удалить строки с пустыми ячейками. Посмотрите на данные ниже,
Выполните следующие шаги, чтобы удалить строку в Excel с помощью VBA.
Шаг 1: Откройте VB Editor, нажав Visual Basic на вкладке разработчика,
Шаг 2: Объявите подфункцию, чтобы начать писать код.
Код:
Sub Sample4 () End Sub
Шаг 2: Объявите две переменные как диапазон, A и B.
Код:
Sub Sample4 () Dim A как диапазон Dim B как конец диапазона Sub
Шаг 3: Чтобы принять ввод от пользователя для выбора диапазона, который нужно удалить, мы будем использовать функцию поля ввода и сохраним этот ввод в переменной, определенной выше.
Код:
Sub Sample4 () Dim A в качестве диапазона Dim B в качестве набора диапазонов A = Application.InputBox («Выбрать данные», «Образец макроса», Тип: = 8) End Sub
Шаг 4: Установите B = A, чтобы ввод от пользователя можно было сохранить в диапазоне B.
Код:
Sub Sample4 () Dim A в качестве диапазона Dim B в качестве диапазона Set A = Application.InputBox («Выбор данных», «Sample Macro», Тип: = 8) Set B = A End Sub
Шаг 5: Теперь мы удалим данные с пустыми ячейками из диапазона, выбранного пользователем.
Код:
Sub Sample4 () Dim A в качестве диапазона Dim B в качестве диапазона Set A = Application.InputBox («Выбрать данные», «Sample Macro», Type: = 8) Set B = A A.SpecialCells (xlCellTypeBlanks) .EntireRow.Delete End Sub
Шаг 6: Теперь запустите код с помощью кнопки запуска.
Шаг 6: Появляется поле ввода.
Шаг 7: Выберите диапазон от A1: D8 в этом примере. Нажмите OK, чтобы увидеть результат.
Данные с пустыми ячейками были удалены.
То, что нужно запомнить
Есть несколько вещей, которые мы должны помнить об удалении строки в Excel VBA:
- Мы можем удалить строку на основе одной ячейки.
- Мы можем удалить несколько строк, задав диапазон ячеек.
- Мы также можем удалять строки, принимая данные от пользователя.
Рекомендуемые статьи
Это был путеводитель по VBA Delete Row. Здесь мы обсудили, как удалить строку в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —
- Как использовать функцию замены в VBA?
- Excel Удалить строку ярлык
- VBA Case | Excel Tricks
- Ярлык строки вставки Excel
- Как суммировать несколько строк в Excel?