Excel как удалить ячейки макросом

Программное удаление ячеек в VBA Excel со сдвигом влево или со сдвигом вверх методом Delete объекта Range. Константы XlDeleteShiftDirection.

Range.Delete – это метод, удаляющий объект Range (диапазон ячеек, одну ячейку) со сдвигом замещающих ячеек справа-налево или снизу-вверх для замены удаленных ячеек.

Синтаксис

Expression.Delete (Shift)

Expression – выражение (переменная), возвращающее объект Range.

Параметры

Параметр Описание
Shift Константа из коллекции XlDeleteShiftDirection, определяющая способ сдвига замещающих ячеек для замены удаленных ячеек.

Если параметр Shift опущен, Microsoft Excel самостоятельно выберет способ сдвига замещающих ячеек в зависимости от формы диапазона.

Константы XlDeleteShiftDirection:

Константа Значение Описание
xlShiftToLeft -4159 Замещающие ячейки сдвигаются справа-налево.
xlShiftUp -4162 Замещающие ячейки сдвигаются снизу-вверх.

Примеры

Удаление ячейки со сдвигом влево:

ActiveCell.Delete xlShiftToLeft

Range(«D4»).Delete xlShiftToLeft

Cells(6, 8).Delete xlShiftToLeft

Удаление диапазона со сдвигом вверх:

Selection.Delete xlShiftUp

Range(«E3:H9»).Delete xlShiftUp


Содержание

  1. VBA Excel. Range.Clear и другие методы очистки ячеек
  2. Методы очистки ячеек
  3. Примеры использования
  4. 6 комментариев для “VBA Excel. Range.Clear и другие методы очистки ячеек”
  5. Удаление пустых ячеек из диапазона
  6. Постановка задачи
  7. Способ 1. Грубо и быстро
  8. Способ 2. Формула массива
  9. Способ 3. Пользовательская функция на VBA
  10. Удалите ячейки с помощью параметра «For Each. Цикл «Далее» в Excel
  11. Аннотация
  12. Дополнительная информация
  13. Образец данных
  14. Пример макроса
  15. Поведение примера макроса в Excel 2002 и более поздних версиях Excel
  16. Поведение примера макроса в Microsoft Excel 5.0 и Microsoft Excel 7.0
  17. Рекомендуемый метод для удаления ячеек с помощью цикла
  18. Дополнительный метод для удаления ячеек с помощью цикла
  19. Как удалить ячейки в Excel по условию?
  20. Удаление стандартными средствами Excel
  21. Удаление с помощью макроса (надстройки)
  22. Как удалить строки по условию?

VBA Excel. Range.Clear и другие методы очистки ячеек

Метод 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 возвращают очищаемые свойства ячеек к значениям по умолчанию. К таким, как на вновь созданном стандартном рабочем листе. При любых методах очистки высота строк и ширина столбцов не изменяются.

Фразы для контекстного поиска: очистка ячеек, очистка ячейки, очистка формул, очистка от формул, удаление формул, очистка значений, удаление значений, очистка форматов, удаление форматирования, удаление форматов.

6 комментариев для “VBA Excel. Range.Clear и другие методы очистки ячеек”

Здравствуйте!
Есть такая проблема:
1. В отдельном модуле написана процедура, которая при запуске и вводе в inputbox данных генерирует таблицу с данными. Вот перед каждой генерацией сделал так, чтобы содержимое листа , кроме первой строки (шапки), очищалось: Thisbooks.Worksheets(«Лист3»).Range(«A2»,Cells(lastRow, lastColumn).clear

2. На первом листе у меня как бы меню управления. Там кнопка, к которой привязана эта процедура. При запуске выполнение процедуры доходит до строки с очисткой и уходит в ошибку 1004 run time error: Application-defined or object-defined error.

При этом, если эту же процедуру запускать с кнопки, или через F5, но с открытого Лист3 — все отлично выполняется!

Никак не могу додуматься в чем же проблема. Подскажите пожалуйста!

Источник

Удаление пустых ячеек из диапазона

Постановка задачи

Имеем диапазон ячеек с данными, в котором есть пустые ячейки:

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

Способ 1. Грубо и быстро

  1. Выделяем исходный диапазон
  2. Жмем клавишу F5, далее кнопка Выделить(Special) . В открывшмся окне выбираем Пустые ячейки(Blanks) и жмем ОК.

Выделяются все пустые ячейки в диапазоне.

  • Даем в меню команду на удаление выделенных ячеек: правой кнопкой мыши Удалить ячейки (Delete Cells) со сдвигом вверх.
  • Способ 2. Формула массива

    Для упрощения дадим нашим рабочим диапазонам имена, используя Диспетчер Имен (Name Manager) на вкладке Формулы (Formulas) или — в Excel 2003 и старше — меню Вставка — Имя — Присвоить (Insert — Name — Define)


    Диапазону B3:B10 даем имя ЕстьПустые, диапазону D3:D10 — НетПустых. Диапазоны должны быть строго одного размера, а расположены могут быть где угодно относительно друг друга.

    Теперь выделим первую ячейку второго диапазона (D3) и введем в нее такую страшноватую формулу:

    В английской версии это будет:
    =IF(ROW()-ROW(НетПустых)+1>ROWS(ЕстьПустые)-COUNTBLANK(ЕстьПустые),»»,INDIRECT(ADDRESS(SMALL((IF(ЕстьПустые<>«»,ROW(ЕстьПустые),ROW()+ROWS(ЕстьПустые))),ROW()-ROW(НетПустых)+1),COLUMN(ЕстьПустые),4)))

    Причем ввести ее надо как формулу массива, т.е. после вставки нажать не Enter (как обычно), а Ctrl+Shift+Enter. Теперь формулу можно скопировать вниз, используя автозаполнение (потянуть за черный крестик в правом нижнем углу ячейки) — и мы получим исходный диапазон, но без пустых ячеек:

    Способ 3. Пользовательская функция на VBA

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

    Для этого откройте редактор Visual Basic (ALT+F11), вставьте новый пустой модуль (меню Insert — Module) и скопируйте туда текст этой функции:

    Не забудьте сохранить файл и вернитесь из редактора Visual Basic в Excel. Чтобы использовать эту функцию в нашем примере:

    1. Выделите достаточный диапазон пустых ячеек, например F3:F10.
    2. Идем в меню Вставка — Функция (Insert — Function) или жмем на кнопку Вставить функцию(Insert Function) на вкладке Формулы (Formulas) в новых версиях Excel. В категории Определенные пользователем (User Defined) выберите нашу функцию NoBlanks.
    3. В качестве аргумента функции укажите исходный диапазон с пустотами (B3:B10) и нажмите Ctrl+Shift+Enter, чтобы ввести функцию как формулу массива.

    Источник

    Удалите ячейки с помощью параметра «For Each. Цикл «Далее» в Excel

    Аннотация

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

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

    Дополнительная информация

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

    Образец данных

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

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

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

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

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

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

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

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

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

    Однако в отличие от поведения цикла в Excel 2002 и более поздних версиях Excel, когда «For Each. Цикл «Далее» вычисляет ячейку в Excel 5.0, а в Excel 7.0 — повторно вычисляет ячейку, если она удаляется в цикле. Таким образом, ячейки не пропускаются.

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

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

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

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

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

    Источник

    Как удалить ячейки в Excel по условию?

    Часто при работе с табличными данными в Excel возникает необходимость удалить пустые или повторяющиеся ячейки. Встречаются также ситуации, когда необходимо скрыть либо удалить ячейки, с определенными значениями или удовлетворяющие заданным условиям. Ячейки можно удалить разными способами, например вместе со строкой, вместе со столбцом, со сдвигом влево или со сдвигом вниз. Сделать это можно как стандартными средствами Excel, так и программно, при помощи макросов, что гораздо более удобно и эффективно. Рассмотрим различные способы удаления ячеек.

    Удаление стандартными средствами Excel

    Перед удалением необходимо выделить удаляемую ячейку или группу ячеек, после чего щелкнуть правой кнопкой мыши на выделенной области, что приведет к появлению контекстного меню. В появившемся меню выбираем пункт «Удалить».

    Выбор этого пункта меню предусматривает 4 варианта удаления, удаление строк и удаление столбцов, в которых содержатся ячейки, а также удаление непосредственно самих ячеек с выбором направления сдвига. В Excel предусмотрено два направления сдвига – либо вверх либо влево.

    После выбора одного из четырех пунктов меню в диалоговом окне остается нажать кнопку «ОК». Окно «Удаление ячеек» можно вызвать также и через вкладку «Главная», в группе «Ячейки», если вызвать меню кнопки «Удалить» и в списке команд выбрать пункт «Удалить ячейки».

    Удаление с помощью макроса (надстройки)

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

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

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

    Источник

    Как удалить строки по условию?

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

    Способ первый:
    Использовать встроенное средство 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, который потребует только указания значения, которое необходимо найти в строке и номер столбца, в котором искать значение.

    Sub Del_SubStr() Dim sSubStr As String ‘искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim lMet As Long Dim arr sSubStr = InputBox(«Укажите значение, которое необходимо найти в строке», «www.excel-vba.ru», «») If sSubStr = «» Then lMet = 0 Else lMet = 1 lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «www.excel-vba.ru», 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow ‘цикл с первой строки до конца If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

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

    Sub Del_SubStr() Dim sSubStr As String ‘искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim arr sSubStr = InputBox(«Укажите значение, которое необходимо найти в строке», «www.excel-vba.ru», «») lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «www.excel-vba.ru», 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow ‘цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

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

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

    Sub Del_Array_SubStr() Dim sSubStr As String ‘искомое слово или фраза Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «www.excel-vba.ru», 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count ‘заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value ‘Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets(«Лист2») ‘Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With ‘удаляем Dim rr As Range For lr = 1 To UBound(avArr, 1) sSubStr = avArr(lr, 1) For li = 1 To lLastRow ‘цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li DoEvents Next lr If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

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

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

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

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

    ‘процедура оставляет в листе только те значения, которые перечислены в списке Sub LeaveOnlyFoundInArray() Dim sSubStr As String ‘искомое слово или фраза Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr Dim IsFind As Boolean lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «www.excel-vba.ru», 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count ‘заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value ‘Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets(«Лист2») ‘Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With ‘удаляем Dim rr As Range For li = 1 To lLastRow ‘цикл с первой строки таблицы до конца IsFind = False For lr = 1 To UBound(avArr, 1) ‘цикл по списку значений на удаление sSubStr = avArr(lr, 1) If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then IsFind = True End If DoEvents Next lr ‘если значение таблицы не найдено в списке — удаляем строку If Not IsFind Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

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

    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-ти шапка), то код будет выглядеть так:

    For li = 7 To lLastRow ‘цикл с седьмой строки до конца

    А если надо удалять только с 3-ей по 300-ю, то код будет выглядеть так:

    For li = 3 To 300 ‘цикл с третьей строки до трехсотой

    Статья помогла? Поделись ссылкой с друзьями!

    Источник

    Удаление пустых ячеек из диапазона

    Постановка задачи

    Имеем диапазон ячеек с данными, в котором есть пустые ячейки:

    delete_blanks1.gif

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

    Способ 1. Грубо и быстро

    1. Выделяем исходный диапазон
    2. Жмем клавишу F5, далее кнопка Выделить (Special). В открывшмся окне выбираем Пустые ячейки (Blanks) и жмем ОК.

      delete_blanks3.png

      Выделяются все пустые ячейки в диапазоне.

    3. Даем в меню команду на удаление выделенных ячеек: правой кнопкой мыши Удалить ячейки (Delete Cells) со сдвигом вверх.

    Способ 2. Формула массива

    Для упрощения дадим нашим рабочим диапазонам имена, используя Диспетчер Имен (Name Manager) на вкладке Формулы (Formulas) или — в Excel 2003 и старше — меню Вставка — Имя — Присвоить (Insert — Name — Define)

    delete_blanks2.gif

    Диапазону  B3:B10 даем имя ЕстьПустые, диапазону D3:D10 — НетПустых. Диапазоны должны быть строго одного размера, а расположены могут быть где угодно относительно друг друга.

    Теперь выделим первую ячейку второго диапазона (D3) и введем в нее такую страшноватую формулу:

    =ЕСЛИ(СТРОКА()-СТРОКА(НетПустых)+1>ЧСТРОК(ЕстьПустые)-СЧИТАТЬПУСТОТЫ(ЕстьПустые);»»;ДВССЫЛ(АДРЕС(НАИМЕНЬШИЙ((ЕСЛИ(ЕстьПустые<>»»;СТРОКА(ЕстьПустые);СТРОКА()+ЧСТРОК(ЕстьПустые)));СТРОКА()-СТРОКА(НетПустых)+1);СТОЛБЕЦ(ЕстьПустые);4)))

    В английской версии это будет:

    =IF(ROW()-ROW(НетПустых)+1>ROWS(ЕстьПустые)-COUNTBLANK(ЕстьПустые),»»,INDIRECT(ADDRESS(SMALL((IF(ЕстьПустые<>»»,ROW(ЕстьПустые),ROW()+ROWS(ЕстьПустые))),ROW()-ROW(НетПустых)+1),COLUMN(ЕстьПустые),4)))

    Причем ввести ее надо как формулу массива, т.е. после вставки нажать не Enter (как обычно), а Ctrl+Shift+Enter. Теперь формулу можно скопировать вниз, используя автозаполнение (потянуть за черный крестик в правом нижнем углу ячейки) — и мы получим исходный диапазон, но без пустых ячеек:

    delete_blanks4.gif

    Способ 3. Пользовательская функция на VBA

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

    Для этого откройте редактор Visual Basic (ALT+F11), вставьте новый пустой модуль (меню Insert — Module) и скопируйте туда текст этой функции:

    Function NoBlanks(DataRange As Range) As Variant()
    
        Dim N As Long
        Dim N2 As Long
        Dim Rng As Range
        Dim MaxCells As Long
        Dim Result() As Variant
        Dim R As Long
        Dim C As Long
        
        MaxCells = Application.WorksheetFunction.Max( _
            Application.Caller.Cells.Count, DataRange.Cells.Count)
        ReDim Result(1 To MaxCells, 1 To 1)
        
        For Each Rng In DataRange.Cells
            If Rng.Value <> vbNullString Then
                N = N + 1
                Result(N, 1) = Rng.Value
            End If
        Next Rng
        For N2 = N + 1 To MaxCells
            Result(N2, 1) = vbNullString
        Next N2
        
        If Application.Caller.Rows.Count = 1 Then
            NoBlanks = Application.Transpose(Result)
        Else
            NoBlanks = Result
        End If
    
    End Function
    

    Не забудьте сохранить файл и вернитесь из редактора Visual Basic в Excel. Чтобы использовать эту функцию в нашем примере:

    1. Выделите достаточный диапазон пустых ячеек, например F3:F10.
    2. Идем в меню Вставка — Функция (Insert — Function) или жмем на кнопку Вставить функцию (Insert Function) на вкладке Формулы (Formulas) в новых версиях Excel. В категории Определенные пользователем (User Defined) выберите нашу функцию NoBlanks.
    3. В качестве аргумента функции укажите исходный диапазон с пустотами (B3:B10) и нажмите Ctrl+Shift+Enter, чтобы ввести функцию как формулу массива.

    Ссылки по теме:

    • Удаление сразу всех пустых строк в таблице простым макросом
    • Удаление сразу всех пустых строк на листе с помощью надстройки PLEX
    • Быстрое заполнение всех пустых ячеек
    • Что такое макросы, куда вставлять код макросов на VBA

    Часто при работе с табличными данными в Excel возникает необходимость удалить пустые или повторяющиеся ячейки. Встречаются также ситуации, когда необходимо скрыть либо удалить ячейки, с определенными значениями или удовлетворяющие заданным условиям. Ячейки можно удалить  разными способами, например вместе со строкой, вместе со столбцом, со сдвигом влево или со сдвигом вниз. Сделать это можно как стандартными средствами Excel, так и программно, при помощи макросов, что гораздо более удобно и эффективно. Рассмотрим различные способы удаления ячеек.

    Перед удалением необходимо выделить удаляемую ячейку или группу ячеек, после чего щелкнуть правой кнопкой мыши на выделенной области, что приведет к появлению контекстного меню. В появившемся меню выбираем пункт «Удалить».

    как удалить ячейки в Excel

    Выбор этого пункта меню предусматривает 4 варианта удаления, удаление строк и удаление столбцов, в которых содержатся ячейки, а также удаление непосредственно самих ячеек с выбором направления сдвига. В Excel предусмотрено два направления сдвига – либо вверх либо влево.

    диалоговое окно удаления ячеек в ExcelПосле выбора одного из четырех пунктов меню в диалоговом окне остается нажать кнопку «ОК». Окно «Удаление ячеек» можно вызвать также и через вкладку «Главная», в группе «Ячейки», если вызвать меню кнопки «Удалить» и в списке команд выбрать пункт «Удалить ячейки».

    Удаление с помощью макроса (надстройки)

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

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

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

    как выборочно удалить ячейки по условиюCompleteSolutionмакрос (надстройка) для выборочного удаления ячеек в зависимости от условий и значений

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

    Видео по выборочному удалению ячеек

    Другие материалы по теме:

    Дениск

    1

    06.02.2010, 02:04. Показов 13659. Ответов 12

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

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

    Visual Basic
    1
    2
    3
    4
    5
    
    For i=1 to 8
    For j=1 to 100
    Cells(i,j)
    Next i
    Next j

    Зарание благодарен.

    Programming

    Эксперт

    94731 / 64177 / 26122

    Регистрация: 12.04.2006

    Сообщений: 116,782

    06.02.2010, 02:04

    12

    0 / 0 / 0

    Регистрация: 31.01.2008

    Сообщений: 72

    07.02.2010, 13:29

    2

    Удалять можно только строки или столбцы — метод delete
    например:
    для одного можно задать номер:
    Columns(1).Delete
    для нескольких — строка:
    Columns(‘A:E’).Delete
    Rows(‘1:8’).Delete

    Ячейки можно только очистить содержимое, унивесальная конструкция:
    Range(Cells(1, 1), Cells(100, 8)).Clear



    0



    Дениск

    07.02.2010, 22:25

    3

    Спасибо, Range(Cells(1, 1), Cells(8, 100)).Clear то что было нужно,
    но хотел бы уточнить , возможно ли удалить столбец или строку номер которого(ой) неизвестен заранее,
    а вычисляется программой?

    Savelev

    08.02.2010, 08:51

    4

    Удалять — метод для обьекта Range. Cells, Columns, Rows также являются обьектом Range. Поэтому их тоже можно удалять (Delete), как впрочем и чистить (Clear).

    Dim L As Long

    l=10
    Rows(L).Delete

    2 / 2 / 1

    Регистрация: 01.01.2008

    Сообщений: 410

    08.02.2010, 11:46

    5

    2 Serg61
    Ну ты загнул… ячейки улалять нельзя.:-)



    0



    Дениск

    15.02.2010, 22:34

    6

    А как сделать, чтобы при открытии Книги очищалась одна и таже область ячеек на нескольких Листах Книги при этом координаты не известны а вычисляются программой

    К примеру:

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    
    Sub my()
    b% = 11
    Do Until Len(Cells(b%, 2)) <= 1
    b% = b% + 1
    Loop
    Worksheets('List1').Range(Cells(b%, 1), Cells(51, 10)).Clear
    Worksheets('List2').Range(Cells(b%, 1), Cells(51, 10)).Clear
    End Sub

    Выдаёт ошибку в строках с указанием имён Листов

    0 / 0 / 0

    Регистрация: 31.01.2008

    Сообщений: 72

    16.02.2010, 13:42

    7

    А есть ли эти листы в книге?
    В Русском Excel-e они называются ‘Лист1’, ‘Лист2’,
    в оригинале ‘Sheet1’,’Sheet2’…, если ты сам не поменял их название…



    0



    Дениск

    16.02.2010, 22:46

    8

    Имена листов само собой пишу те которые у меня
    А ошибку выдаёт вот такую: Aplication-defined or object-definder error

    0 / 0 / 0

    Регистрация: 31.01.2008

    Сообщений: 72

    17.02.2010, 08:47

    9

    Посмотри чему равно b, msgbox(b%), случайно не больше 51.
    Попробуй выполнить эту конструкцию с константами…



    0



    Дениск

    17.02.2010, 23:20

    10

    Пробовал запускать с константами выдаёт ту же ошибку

    VMRange

    0 / 0 / 0

    Регистрация: 24.06.2008

    Сообщений: 41

    18.02.2010, 10:05

    11

    IgorT
    Ячейки тоже удаляются без проблем, именно удаляются
    Вставь в модуль и попробуй:

    Visual Basic
    1
    2
    3
    
    Sub DelActivCell()
    Application.ActiveCell.Delete
    End Sub



    0



    2 / 2 / 1

    Регистрация: 01.01.2008

    Сообщений: 410

    21.02.2010, 09:42

    12

    2VMRange
    Ты меня не правильно прочитал :-)



    0



    2 / 2 / 1

    Регистрация: 01.01.2008

    Сообщений: 410

    21.02.2010, 09:52

    13

    2Дениск

    для неактивного листа должно быть
    Range(Worksheets(‘Лист2’).Cells(10, ‘C’), Worksheets(‘Лист2’).Cells(15, ‘G’)).Clear



    0



    Понравилась статья? Поделить с друзьями:
  • Excel как удалить циклические ссылки в excel
  • Excel как удалить формулы с одного столбца
  • Excel как удалить форматирование ячеек
  • Excel как удалить формат таблицы
  • Excel как удалить фильтр с одного столбца