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

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

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

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

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

Определить границы используемого диапазона на рабочем листе из кода VBA Excel нам поможет последняя ячейка используемого диапазона: Cells.SpecialCells(xlLastCell).

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

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

Пример кода VBA Excel для активного листа:

Sub Primer1()

Dim n As Long, i As Long

‘Определяем номер строки последней ячейки

‘используемого диапазона на рабочем листе

n = Cells.SpecialCells(xlLastCell).Row

    ‘Ищем и удаляем пустые строки

    For i = n To 1 Step 1

        If Rows(i).Text = «» Then Rows(i).Delete

    Next

End Sub

То же самое, но с указанием книги и рабочего листа:

Sub Primer2()

Dim n As Long, i As Long

    With ThisWorkbook.Worksheets(«Лист1»)

        n = .Cells.SpecialCells(xlLastCell).Row

            For i = n To 1 Step 1

                If .Rows(i).Text = «» Then .Rows(i).Delete

            Next

    End With

End Sub

Программа определения времени выполнения макроса показала, что этот код отработал в диапазоне из 3000 строк за 17,5 секунд.

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

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

Sub Primer3()

Dim n As Long, i As Long, myRange As Range

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

‘рабочего листа до последней ячейки используемого диапазона

Set myRange = Range(Range(«A1»), Cells.SpecialCells(xlLastCell))

    With myRange

        n = .Rows.Count

        For i = n To 1 Step 1

            If .Rows(i).Text = «» Then .Rows(i).Delete

        Next

    End With

End Sub

Программа определения времени выполнения макроса показала, что этот код отработал в диапазоне из 3000 строк за 13,3 секунды.

Удаление строк по пустым ячейкам

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

Sub Primer4()

Dim n As Long, i As Long

n = Cells.SpecialCells(xlLastCell).Row

    For i = n To 1 Step 1

        If Cells(i, 1).Text = «» Then Rows(i).Delete

    Next

End Sub

или так:

Sub Primer5()

Dim n As Long, i As Long, myRange As Range

Set myRange = Range(Range(«A1»), Cells.SpecialCells(xlLastCell))

    With myRange

        n = .Rows.Count

        For i = n To 1 Step 1

            If .Cells(i, 1).Text = «» Then .Rows(i).Delete

        Next

    End With

End Sub

В этих примерах поиск пустой ячейки производится в первом столбце: Cells(i, 1).

Удаление пустых строк в заданном диапазоне

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

Удаление полностью пустых строк в пределах заданного диапазона:

Sub Primer6()

Dim n As Long, i As Long

    With Selection

        n = .Rows.Count

        For i = n To 1 Step 1

            If .Rows(i).Text = «» Then .Rows(i).Delete

        Next

    End With

End Sub

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

Sub Primer7()

Dim n As Long, i As Long

    With Selection

        n = .Rows.Count

        For i = n To 1 Step 1

            If .Cells(i, 1).Text = «» Then .Rows(i).Delete

        Next

    End With

End Sub


Содержание

  1. Как в офисе.
  2. Сортировка
  3. Фильтрация
  4. Выделение группы ячеек
  5. Формула массива
  6. Макрос
  7. Макрос для выделения и удаления пустых строк в Excel
  8. Как выделить все пустые строки макросом
  9. Макрос для удаления пустых строк
  10. Макрос для скрытия пустых строк
  11. Добавление строк макросом
  12. Удаление пустых ячеек из диапазона
  13. Постановка задачи
  14. Способ 1. Грубо и быстро
  15. Способ 2. Формула массива
  16. Способ 3. Пользовательская функция на VBA

Как в офисе.

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

Разрывы, которые возникают в таблице благодаря возникшим пустотам, могут помешать вам эффективно ее использовать. Возникают такие проблемы:

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

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

  1. С помощью сортировки информации;
  2. С помощью наложения фильтра;
  3. С помощью меню выделения группы ячеек;
  4. С помощью формулы массива;
  5. С помощью макроса (VBA).

Сортировка

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

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

Фильтрация

Этот способ также является простым и доступным абсолютно любому пользователю. Для применения фильтра на таблицу вам необходимо на вкладке «Главная» в разделе «Редактирование» нажимать кнопку «Сортировка и фильтр» и в открывшемся пункте меню выбираете «Фильтр».

Выделение группы ячеек

Я бы и этот способ причислил к достаточно простым и лёгким. Для применения этого варианта вам нужен инструмент «Выделение группы ячеек». Удалить незаполненые строки возможно в несколько этапов:

  • выделение нужного диапазона;
  • выбираем вкладку «Главная», в блоке «Редактирование», кликаем «Найти и выделить» и в выпадающем меню выбираете «Выделение группы ячеек»;

  • в диалоговом окне, в разделе «Выделить» отмечаем пункт «пустые ячейки»;

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

Формула массива

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

Итак, в чём же состоит этот способ по удалению пустых строк в Excel и как его применять:

  • для большей простоты дадим имена нашим диапазонам, для этого на вкладке «Формулы» нажимаете «Диспетчер имен» и присваиваете для двух диапазонов имена, например для изначальных данных с пустыми ячейками — «Пустые», а для обработанных — «БезПустых». Обязательное условие в том, что диапазоны должны иметь одинаковый результат, но вот размещение этих диапазонов могут и отличатся, это не критично;

  • следующим шагом это введение в первую ячейку второго диапазона формулу:

=ЕСЛИ( СТРОКА() — СТРОКА (БезПустых) +1> ЧСТРОК( Пустые) — СЧИТАТЬПУСТОТЫ (Пустые);»»; ДВССЫЛ ( АДРЕС (НАИМЕНЬШИЙ ((ЕСЛИ (Пустые <>«»; СТРОКА (Пустые); СТРОКА()+ ЧСТРОК( Пустые))); СТРОКА() — СТРОКА (БезПустых)+1); СТОЛБЕЦ( Пустые);4))). Да я сам знаю, что формула страшная, сам, когда ее увидел, обалдел, тем не менее, она рабочая и исправно выполняет возложенные на нее обязанности;

  • после прописания формулы, вам нужно окончить введение формулы «гарячей» комбинацией клавиш Ctrl+Shift+Enter, это необходимо для того, что бы формула была введена как формула массива. Теперь используя возможность в Excel как авто заполнение (копирование формулы, протягивая за крестик в углу) вы получили исходный диапазон, но уже без пустых ячеек.

Макрос

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

Перейдите во вкладку «Сервис», выберите раздел «Макрос» и нажмите кнопку «Редактор Visual Basic» или нажав ALT+F11 и в появившемся диалоговом окне редактора нажимаем «Insert»«Module».

Источник

Макрос для выделения и удаления пустых строк в Excel

Исходные коды макросов для выделения, удаления, скрытия и добавления пустых строк в таблицу Excel по условию пользователя.

Как выделить все пустые строки макросом

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

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

Откройте редактор Visual Basic (ALT+F11):

И воздайте в нем новый модуль для текущей книги «Insert»-«Module», а потом запишите в него следующий VBA-код макроса:

Sub SelectLine()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range( «A1» ), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox «Ненайдено ниодной пустой строки!»
Else
diapaz2. Select
End If
End Sub

Теперь если нам нужно автоматически выделить все пустые строки в таблице бюджета перед тем как их удалить, выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«SelectLine»-«Выполнить». В результате выделяться все пустые ячейки только для пустых строк внутри исходной таблицы.

Пример работы первого VBA-кода:

Пустые строки, которые находиться под последними заполненными ячейками не будут выделены. Теперь для удаления выделенных строк пользователю осталось только выбрать инструмент: «ГЛАВНАЯ»-«Ячейки»-«Удалить»-«Удалить строки с листа». Или нажать комбинацию горячих клавиш CTRL+=. А после в появившемся окне «Удаление ячеек» выбрать опцию «строку» и нажать ОК.

Вначале кода присваиваем для переменной diapaz1 диапазон ячеек в границах между A1 и последней используемой ячейкой на рабочем листе Excel.

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

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

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

Макрос для удаления пустых строк

Как удалить строку макросом? Если нужно сделать так чтобы макрос автоматически не только выделял, но и сам удалял пустые целые и смежные диапазоны ячеек без использования других инструментов, тогда в конце кода для переменной diapaz2.Select следует изменить метод на [Delete]:

Sub DelLine()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range( «A1» ), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox «Ненайдено ниодной пустой строки!»
Else
diapaz2.[Delete]
End If
End Sub

Пример второго VBA-кода:

Макрос для скрытия пустых строк

Как скрыть пустые строки макросом? Но если вам нужно не удалить, а только скрыть (например, при подготовке документа на печать), тогда эту строку кода следует модифицировать несколько иначе:

Sub HidLine()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range( «A1» ), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox «Ненайдено ниодной пустой строки!»
Else
diapaz2.EntireRow.Hidden = True
End If
End Sub

Пример третьего VBA-кода:

Добавление строк макросом

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

Sub AddLine()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range( «A1» ), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox «Ненайдено ниодной пустой строки!»
Else
diapaz2.[Insert]
End If
End Sub

Пример четвертого VBA-кода:

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

Set diapaz1 = Selection

Внимание! Следует помнить о том, что если таким образом создавать экземпляр объекта для переменной diapaz1, то тогда нельзя перед запуском макроса выделять все ячейки листа или все ячейки любого столбца. Иначе это затормозит программу Excel, так как один лист содержит аж 1 048 576 строк и тогда они все будут обрабатываться макросом, а пользователь будет ждать.

Источник

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

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

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

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

Способ 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, чтобы ввести функцию как формулу массива.

    Источник

    Содержание

    • Алгоритмы удаления
      • Способ 1: выделение групп ячеек
      • Способ 2: условное форматирование и фильтрация
      • Способ 3: применение сложной формулы
    • Вопросы и ответы

    Удаление пустых ячеек в Microsoft Excel

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

    Алгоритмы удаления

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

    • Если строка (столбец) полностью является пустой (в таблицах);
    • Если ячейки в строке и столбце логически не связаны друг с другом (в массивах).

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

    Способ 1: выделение групп ячеек

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

    1. Выделяем диапазон на листе, над которым будем проводить операцию поиска и удаления пустых элементов. Жмем на функциональную клавишу на клавиатуре F5.
    2. Выделение диапазона в Microsoft Excel

    3. Запускается небольшое окошко, которое называется «Переход». Жмем в нем кнопку «Выделить…».
    4. Переход к выделению в Microsoft Excel

    5. Открывается следующее окно – «Выделение групп ячеек». Устанавливаем в нем переключатель в позицию «Пустые ячейки». Выполняем щелчок по кнопке «OK».
    6. Выделение пустых ячеек в Microsoft Excel

    7. Как видим, все пустые элементы указанного диапазона были выделены. Кликаем по любому из них правой кнопкой мыши. В запустившемся контекстном меню щелкаем по пункту «Удалить…».
    8. Удаление ячеек в Microsoft Excel

    9. Открывается маленькое окошко, в котором нужно выбрать, что именно следует удалить. Оставляем настройки по умолчанию – «Ячейки, со сдвигом вверх». Жмем на кнопку «OK».

    Удаление ячеек со сдвигом вверх в Microsoft Excel

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

    Пустые ячейки удалены в Microsoft Excel

    Способ 2: условное форматирование и фильтрация

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

    1. Выделяем диапазон, который собираемся обрабатывать. Находясь во вкладке «Главная», жмем на пиктограмму «Условное форматирование», которая, в свою очередь, располагается в блоке инструментов «Стили». Переходим в пункт открывшегося списка «Правила выделения ячеек». В появившемся списке действий выбираем позицию «Больше…».
    2. Переход к условному форматированию в Microsoft Excel

    3. Открывается окошко условного форматирования. В левое поле вписываем цифру «0». В правом поле выбираем любой цвет, но можно оставить настройки по умолчанию. Щелкаем по кнопке «OK».
    4. Окно условного форматирования в Microsoft Excel

      Lumpics.ru

    5. Как видим, все ячейки указанного диапазона, в которых находятся значения, были выделены в выбранный цвет, а пустые остались белыми. Опять выделяем наш диапазон. В этой же вкладке «Главная» щелкаем по кнопке «Сортировка и фильтр», расположенной в группе «Редактирование». В открывшемся меню жмем на кнопку «Фильтр».
    6. Включение фильтра в Microsoft Excel

    7. После этих действий, как видим, в верхнем элементе столбца появилась пиктограмма символизирующая фильтр. Жмем на неё. В открывшемся списке переходим в пункт «Сортировка по цвету». Далее в группе «Сортировка по цвету ячейки» выбираем тот цвет, которым произошло выделение в результате условного форматирования.
      Применение фильтра в Microsoft Excel

      Можно также сделать немного по-другому. Кликаем по значку фильтрации. В появившемся меню снимаем галочку с позиции «Пустые». После этого щелкаем по кнопке «OK».

    8. Снятие галочки с фильтра в Microsoft Excel

    9. В любом из указанных в предыдущем пункте вариантов пустые элементы будут скрыты. Выделяем диапазон оставшихся ячеек. На вкладке «Главная» в блоке настроек «Буфер обмена» выполняем щелчок по кнопке «Копировать».
    10. Копирование в Microsoft Excel

    11. Затем выделяем любую пустую область на том же или на другом листе. Выполняем щелчок правой кнопкой мыши. В появившемся контекстном списке действий в параметрах вставки выбираем пункт «Значения».
    12. Вставка данных в Microsoft Excel

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

    Данные вставлены в Microsoft Excel

    Урок: Условное форматирование в Excel

    Урок: Сортировка и фильтрация данных в Excel

    Способ 3: применение сложной формулы

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

    1. Прежде всего, нам нужно будет дать имя диапазону, который подвергается трансформации. Выделяем область, делаем щелчок правой кнопкой мышки. В активировавшемся меню выбираем пункт «Присвоить имя…».
    2. Переход к присвоению имени в Microsoft Excel

    3. Открывается окно присвоения наименования. В поле «Имя» даем любое удобное название. Главное условие – в нем не должно быть пробелов. Для примера мы присвоили диапазону наименование «С_пустыми». Больше никаких изменений в том окне вносить не нужно. Жмем на кнопку «OK».
    4. Присвоение имени в Microsoft Excel

    5. Выделяем в любом месте на листе точно такой же по размерам диапазон пустых ячеек. Аналогично кликаем правой кнопкой мыши и, вызвав контекстное меню, переходим по пункту «Присвоить имя…».
    6. Переход к присвоению имени второго диапазона в Microsoft Excel

    7. В открывшемся окне, как и в предыдущий раз, присваиваем любое наименование данной области. Мы решили дать ей название «Без_пустых».
    8. Присвоение имени второго диапазона в Microsoft Excel

    9. Выделяем двойным щелчком левой кнопки мышки первую ячейку условного диапазона «Без_пустых» (у вас он может назваться и по-другому). Вставляем в неё формулу следующего типа:

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

      Так как это формула массива, то для выведения расчета на экран нужно нажать комбинацию клавиш Ctrl+Shift+Enter, вместо обычного нажатия кнопки Enter.

    10. Ввод формулы в Microsoft Excel

    11. Но, как видим, заполнилась только одна ячейка. Для того, чтобы заполнились и остальные, нужно скопировать формулу на оставшуюся часть диапазона. Это можно сделать с помощью маркера заполнения. Устанавливаем курсор в нижний правый угол ячейки, содержащей комплексную функцию. Курсор должен преобразоваться в крестик. Зажимаем левую кнопку мыши и тянем его вниз до самого конца диапазона «Без_пустых».
    12. Маркер заполнения в Microsoft Excel

    13. Как видим, после этого действия мы имеем диапазон, в котором подряд расположены заполненные ячейки. Но выполнять различные действия с этими данными мы не сможем, так как они связаны формулой массива. Выделяем весь диапазон «Без_пустых». Жмем на кнопку «Копировать», которая размещена во вкладке «Главная» в блоке инструментов «Буфер обмена».
    14. Копирование данных в Microsoft Excel

    15. После этого выделяем первоначальный массив данных. Щелкаем правой кнопкой мыши. В открывшемся списке в группе «Параметры вставки» жмем на пиктограмму «Значения».
    16. Вставка в Microsoft Excel

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

    Данные вставлены в программе Microsoft Excel

    Урок: Как присвоить имя ячейке в Excel

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

    Еще статьи по данной теме:

    Помогла ли Вам статья?

    Skip to content

    6 способов — как безопасно удалить лишние пустые строки в Excel

    Это руководство научит вас нескольким простым приемам безопасного удаления нескольких пустых строк в Excel без потери информации.

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

    В этой статье вы узнаете несколько простых и надежных методов удаления “белых пятен” на листах Excel.

    • Как НЕ НАДО удалять пустые строки в Excel
    • Как удалить пустые строки при помощи формул
    • Использование Power Query
    • Удаляем строки с определенными пустыми ячейками
    • Как убрать или скрыть лишние строки под данными
    • Как быстро удалить пустые строки при помощи VBA
    • Макрос 1. Удаление в выбранном диапазоне
    • Макрос 2. Удаляем все пустые строки
    • Макрос 3. Критерий удаления — пустая ячейка
    • Самый быстрый способ удалить пустые строки в Excel

    Как НЕ НАДО удалять пустые строки в Excel

    Есть несколько различных способов удаления пустых строк в Microsoft Excel. Но на удивление многие онлайн-ресурсы придерживаются в своих рекомендациях наиболее опасных из них.

    Пожалуй, самый популярный совет – использовать инструмент «Найти и выделить» > «Перейти к специальному» > «Пробелы» .

    Что плохого в этой технике? Она выбирает все пустоты в диапазоне данных. Но ведь в строке может быть, к примеру, только одна пустая ячейка, а в остальных будет записаны какие-то данные. И, следовательно, вы в итоге удалите множество строчек, которые содержат хотя бы одну пустую ячейку. Некоторые нужные данные, естественно, будут утеряны.

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

    И ключевым в данном случае является вопрос: «Вы уверены, что все ячейки в вашей строке пустые? У вас точно нет таких, в которых по какой-то причине не заполнены одна или несколько ячеек, а остальные содержат данные?»

    Просто запомните: «Не следует использовать метод поиска пустых ячеек, чтобы выделить и удалить пустые строки».

    В качестве иллюстрации на изображении ниже слева показана исходная таблица, а справа — итоговая таблица. И в результирующей таблице все неполные строки пропали, даже 4,6 и 10, которые были частично заполнены:

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

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

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

    С фильтрацией примерно та же история. Вы можете установить фильтр по пустым ячейкам в каком-то конкретном столбце. Далее все может произойти так же, как в истории с сортировкой. Какие-то из ячеек могут оказаться заполнены нужной информацией. Чтобы обезопасить себя от случайной её потери, такой фильтр по пустым ячейкам нужно установить в каждом столбце. Хорошо, если их в вашей таблице штук 5. А если 20? А 30? Вряд ли у вас есть желание устанавливать, а затем снимать даже 10 фильтров.

    Поэтому эти методы – это также не наш выбор.

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

    Формула для удаления пустых строк в Excel

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

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

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

    =ЕСЛИ(СЧЁТЗ(A2:E2)=0;»Пусто»;»»)

    Где A2 — первая, а E2 — последняя использованная ячейка первой строки данных.

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

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

    Логика формулы очевидна: вы подсчитываете заполненные ячейки с помощью функции СЧЁТЗ и используете оператор ЕСЛИ для возврата «Пусто» для нулевого результата. Если же найдена хоть какая-то информация в нужном диапазоне, то не возвращаем ничего.

    Фактически, вы можете обойтись без ЕСЛИ:

    =СЧЁТЗ(A2:Е2)=0

    В этом случае формула вернет ИСТИНА для пустых и ЛОЖЬ для заполненных строк.

    Встречаются также аналогичные решения с использованием функции СЧИТАТЬПУСТОТЫ. В ней указываем диапазон ячеек и затем сравниваем с количеством столбцов.

    =ЕСЛИ(СЧИТАТЬПУСТОТЫ(A2:E2)=ЧИСЛСТОЛБ(A2:E2);»Пусто»;»»)

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

    Как мы это удаление сделаем?

    Разберем пошагово действия, как быстро удалить пустые строки:

    1. Выберите любую ячейку в заголовке и нажмите «Фильтр» на вкладке «Данные». Это добавит стрелки раскрывающегося списка фильтрации ко всем ячейкам заголовка.
    2. Щелкните стрелку в заголовке столбца формулы, снимите флажок (Выбрать все), выберите «Пусто» и нажмите ОК:

    1. Выделите всё отфильтрованное. Для этого щелкните самую верхнюю ячейку и нажмите Ctrl + Shift + End, чтобы расширить выделение до последней ячейки отфильтрованной области.

    Или же щелкните по номеру первой незаполненной строки на вертикальной шкале координат. При этом вся она должна подсветиться. Затем наберите на клавиатуре комбинацию Ctrl + Shift +  

    (стрелка вниз). При этом будет выделена вся область до конца таблицы. Поле этого кликните по выделению правой кнопкой мыши и выберите из контекстного меню пункт «Удалить». Все выделенные строки будут удалены.

    Можно не вызывать контекстное меню, а просто набрать на клавиатуре сочетание клавиш Ctrl и - .

    1. Снимите фильтр, нажав Ctrl + Shift + L. Или же поставьте курсор в самую верхнюю позицию и вновь нажмите на иконку фильтра в меню «Данные».
    2. Удалите столбец с формулой проверки, поскольку он вам больше не нужен.

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

    Совет. Вместо удаления, вы можете скопировать непустые строки в другое место. Для этого отфильтруйте всё, кроме «Пусто», выделите и нажмите Ctrl + C. Затем переключитесь на другой лист, выберите верхнюю левую ячейку целевого диапазона и нажмите Ctrl + V.

    Как удалить пустые строки в Excel с помощью Power Query

    В Excel 2016 и Excel 2019 есть еще один способ удалить незаполненные строки — с помощью инструмента Power Query. В Excel 2010 и 2013 его можно загрузить как надстройку.

    Важное примечание! Этот метод работает со следующим предостережением: Power Query преобразует ваши данные в таблицу Excel и изменяет форматирование, такое как цвет заливки, границы и некоторые числовые форматы. Если для вас важно форматирование исходных данных, то лучше выбрать другой способ удаления.

    Итак, давайте по порядку.

    1. Выберите диапазон, в котором вы хотите заняться удалением.
    2. Перейдите на   вкладку «Данные»  и нажмите Получить данные — Из других источников —  Из таблицы/диапазона . Это загрузит вашу таблицу в редактор Power Query.

    1. На вкладке Главная в редакторе Power Query щелкните  Удалить строки > Удалить пустые …. (как на рисунке).

    1. Нажмите кнопку «Закрыть и загрузить». Полученная таблица загрузится на новый лист и закроется редактор запросов.

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

    Как удалить строки, если ячейка в определенном столбце пуста

    В начале этого урока мы предостерегали вас от удаления пустых строк путем выбора пробелов. Однако этот метод пригодится, если вы хотите удалить строки на основе пробелов в определенном столбце.

    В качестве примера удалим все строки, в которых ячейка в столбце A не содержит никакой информации:

    1. Выберите ключевой столбец, в нашем случае столбец A.
    2. На вкладке «Главная» нажмите Найти и выделить > Перейти… > Выделить. Или просто нажмите F5 и затем — Выделить… .

    1. В диалоговом окне выберите «Пробелы» и затем — «ОК». Это выделит все пустоты в столбце A.
    2. Щелкните правой кнопкой мыши любую выделенную ячейку и выберите «Удалить…» из контекстного меню.
    3. В диалоговом окне «Удалить» кликните «Строку» и нажмите «ОК».

    Готово! Строки, которые не имеют данных в столбце A, больше не существуют.

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

    Как удалить лишние строки под данными или скрыть их.

    Иногда строки, которые выглядят совершенно пустыми, на самом деле могут содержать пробелы, перевод строки или непечатаемые символы. Чтобы проверить, действительно ли последняя ячейка с данными является последней использованной ячейкой на листе, нажмите Ctrl + End. Если это привело вас к визуально свободной от данных строке под вашими данными, то с точки зрения Excel, в ней на самом деле что-то записано. Чтобы удалить эти лишние строки под таблицей, сделайте следующее:

    1. Щелкните заголовок первой свободной строки под данными, чтобы выбрать ее целиком.
    2. Нажмите Ctrl + Shift + End. Это выберет все строчки ниже, которые содержат что-либо, включая пробелы и непечатаемые символы.
    3. Щелкните выделение правой кнопкой мыши, как это мы уже делали ранее, и выберите «Удалить…».

    Однако, удаление — это достаточно радикальный шаг. Поэтому, думаю, стоит поискать более «мягкие» варианты. К примеру, нет ничего, что могло бы помешать вам незаполненные строки либо столбцы просто скрыть. Вот простая инструкция:

    1. Выберите строку под последней строкой с данными, щелкнув ее заголовок.
    2. Нажмите Ctrl + Shift + , чтобы расширить выделение до конца вниз.
    3. Нажмите Ctrl + 9 чтобы скрыть выбранные строки. Или щелкните выделение правой кнопкой мыши и выберите «Скрыть».

    Чтобы вновь показать ранее скрытое, нажмите Ctrl + A , чтобы выделить весь лист, а затем нажмите Ctrl + Shift + 9, чтобы снова сделать все видимым.

    Аналогичным образом вы можете скрыть неиспользуемые столбцы справа от ваших данных. 

    Как быстро удалить пустые строки в Excel с помощью VBA

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

    Макрос 1. Удалить пустые строки в выбранном диапазоне.

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

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

    Public Sub DeleteBlankRows()
    Dim SourceRange As Range
    Dim EntireRow As Range
    Set SourceRange = Application.Selection
    If Not (SourceRange Is Nothing) Then
    Application.ScreenUpdating = False
    For I = SourceRange.Rows.Count To 1 Step -1
    Set EntireRow = SourceRange.Cells(I, 1).EntireRow
    If Application.WorksheetFunction.CountA(EntireRow) = 0 Then
    EntireRow.Delete
    End If
    Next
    Application.ScreenUpdating = True
    End If
    End Sub

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

    Public Sub RemoveBlankLines()
    Dim SourceRange As Range
    Dim EntireRow As Range
    On Error Resume Next
    Set SourceRange = Application.InputBox( _
    "Выберите диапазон:", "Удалить пустые строки", _
    Application.Selection.Address, Type:=8)
    If Not (SourceRange Is Nothing) Then
    Application.ScreenUpdating = False
    For I = SourceRange.Rows.Count To 1 Step -1
    Set EntireRow = SourceRange.Cells(I, 1).EntireRow
    If Application.WorksheetFunction.CountA(EntireRow) = 0 Then
    EntireRow.Delete
    End If
    Next
    Application.ScreenUpdating = True
    End If
    End Sub

    После запуска макрос показывает вам поле ввода, вы указываете целевой диапазон и нажимаете OK:

    Через мгновение все лишние строки в выбранном диапазоне будут удалены, а оставшиеся сдвинутся вверх.

    Макрос 2. Удалить все пустые строки в Excel

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

    Sub DeleteAllEmptyRows()
    Dim LastRowIndex As Integer
    Dim RowIndex As Integer
    Dim UsedRng As Range
    Set UsedRng = ActiveSheet.UsedRange
    LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count
    Application.ScreenUpdating = False
    For RowIndex = LastRowIndex To 1 Step -1
    If Application.CountA(Rows(RowIndex)) = 0 Then
    Rows(RowIndex).Delete
    End If
    Next RowIndex
    Application.ScreenUpdating = True
    End Sub

    Макрос 3. Удалить строку, если ячейка пуста.

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

    Этот код проверяет столбец A на наличие пробелов. Чтобы удалить строки на основе другого столбца, замените «A» другой соответствующей буквой.

    Sub DeleteRowIfCellBlank()
    On Error Resume Next
    Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End Sub

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

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

    Как добавить макрос в свою книгу?

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

    1. Откройте лист, на котором вы хотите произвести удаление.
    2. Нажмите Alt + F11 , чтобы открыть редактор Visual Basic.
    3. На левой панели щелкните правой кнопкой мыши и выберите Insert  >  Module. Те же пункты можно выбрать вверху через главное меню.
    4. Вставьте код в появившееся окно кода.
    5. Нажмите F5 для запуска макроса (но вы можете сделать это и позже прямо из вашей книги).
    6. Нажмите кнопку «Сохранить». При этом вам будет предложено изменить формат вашей книги. Впрочем, запустить макрос на выполнение можно и без сохранения. Просто закройте окно Visual Basic и вернитесь к вашей таблице. Переходите сразу к пункту 3 ниже.

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

    1. Откройте свою собственную книгу и включите макросы, если будет предложено.
    2. Перейдите к нужной таблице.
    3. На листе нажмите Alt + F8, выберите макрос и нажмите «Выполнить».

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

    DeleteBlankRows — удаляет строки без данных в текущем выбранном диапазоне.

    RemoveBlankLines — удаляет чистые строки и перемещается вверх в диапазоне, выбранном вами после запуска макроса.

    DeleteAllEmptyRows — удаляет все незаполненные строки на активном листе.

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

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

    Самый быстрый способ удалить пустые строки в Excel

    Читая предыдущие примеры, разве не казалось, что мы используем кувалду, чтобы расколоть орех? Существует способ буквально в два клика мышки удалить пустые строки в Excel.

    При помощи надстройки Ultimate Suite вы можете  удалить все пустые строки на листе:

    1. На вкладке Ablebits Tools в группе Преобразование (Transform)  нажмите Удалить пробелы (Delete Blanks) > Пустые строки (Empty Rows) :

    1. Надстройка сообщит вам, что все пустые строки будут удалены из активного листа, и попросит подтвердить. Нажмите ОК, и через мгновение все строки без данных будут удалены.

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

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

    Чтобы узнать о других полезных функциях, включенных в надстройку Ultimate Suite, вы можете загрузить пробную версию.

    Благодарю вас за чтение.

    Формат времени в Excel Вы узнаете об особенностях формата времени Excel, как записать его в часах, минутах или секундах, как перевести в число или текст, а также о том, как добавить время с помощью…
    Как сделать диаграмму Ганта Думаю, каждый пользователь Excel знает, что такое диаграмма и как ее создать. Однако один вид графиков остается достаточно сложным для многих — это диаграмма Ганта.  В этом кратком руководстве я постараюсь показать…
    Как сделать автозаполнение в Excel В этой статье рассматривается функция автозаполнения Excel. Вы узнаете, как заполнять ряды чисел, дат и других данных, создавать и использовать настраиваемые списки в Excel. Эта статья также позволяет вам убедиться, что вы…
    Быстрое удаление пустых столбцов в Excel В этом руководстве вы узнаете, как можно легко удалить пустые столбцы в Excel с помощью макроса, формулы и даже простым нажатием кнопки. Как бы банально это ни звучало, удаление пустых…
    Как быстро объединить несколько файлов Excel Мы рассмотрим три способа объединения файлов Excel в один: путем копирования листов, запуска макроса VBA и использования инструмента «Копировать рабочие листы» из надстройки Ultimate Suite. Намного проще обрабатывать данные в…

    NewStudent07

    0 / 0 / 0

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

    Сообщений: 22

    1

    Нужно удалить пустые ячейки из выбронного столбца

    14.04.2013, 18:06. Показов 10151. Ответов 6

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


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

    Пожалуйста, помогите. Я только учись писать макросы. Вот написала один, а он некоректно работает.
    Цель: нужно удалить пустые ячейки из выбронного столбца. Мой макрос не удаляет пустые ячейки, если они идут одна за другой. Плиз, помогите, розобраться почему, так??

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    Sub Макрос3()
    'Не удаляет 2 и больше подряд пустых ячейки
    Dim R As Range
    Set R = Application.InputBox("Ввыделите верхнюю левую ячейку", _
    "Ввыделяем диапазон", Selection.Address, , , , , 8)
        Range(R, R.Offset(100000, 0).End(xlUp)).Select
        For Each Cell In Selection
        If Cell.Value = 0 Then
        Cell.Delete
        End If
        Next Cell
    End Sub



    0



    Эксперт NIX

    2670 / 786 / 176

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

    Сообщений: 3,672

    14.04.2013, 18:15

    2

    После удаления ячейки, следующая становится текущей. Вот тут собака и зарыта.



    0



    0 / 0 / 0

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

    Сообщений: 22

    14.04.2013, 18:18

     [ТС]

    3

    и как это исправить??



    0



    Казанский

    15136 / 6410 / 1730

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

    Сообщений: 9,999

    14.04.2013, 18:25

    4

    Лучший ответ Сообщение было отмечено как решение

    Решение

    Либо пустить цикл от последней строки к первой, либо обойтись вообще без цикла: F5 — выделить — пустые ячейки — удалить. В VBA это выглядит так:

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Sub Макрос3()
    'Не удаляет 2 и больше подряд пустых ячейки
    Dim R As Range
    Set R = Application.InputBox("Ввыделите верхнюю левую ячейку", _
    "Ввыделяем диапазон", Selection.Address, , , , , 8)
     
    Range(R, Cells(Rows.Count, R.Column)).SpecialCells(xlCellTypeBlanks).Delete xlShiftUp
     
    End Sub



    3



    0 / 0 / 0

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

    Сообщений: 22

    14.04.2013, 18:45

     [ТС]

    5

    Огромное спасибо!! Правда я не совсем понимаю ваш код, так как только начала изучать VBA. Но главное, что он работает!!!

    Цитата
    Сообщение от Казанский
    Посмотреть сообщение

    Либо пустить цикл от последней строки к первой

    А как можно пустить цикл For each Next от последней строки к первой???



    0



    Аксима

    6076 / 1320 / 195

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

    Сообщений: 1,023

    14.04.2013, 19:28

    6

    Цитата
    Сообщение от NewStudent07
    Посмотреть сообщение

    А как можно пустить цикл For each Next от последней строки к первой???

    А вот так (только вместо цикла For each… next надо использовать цикл For… next):

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    Sub Макрос3()
        Dim i As Long, R As Range
        Set R = Application.InputBox("Выделите верхнюю левую ячейку диапазона", _
        "Выделяем диапазон", Selection.Address, , , , , 8)
        'Выделяем верхнюю левую ячейку выбранного пользователем диапазона,
        'так как нет гарантии, что он выберет только одну ячейку.
        Set R = R.Cells(1)
        'Если верхняя левая ячейка выбранного пользователем диапазона пуста,
        'то, скорее всего, пользователь ошибся. Прекращаем работу процедуры.
        If IsEmpty(R) Then
            Exit Sub
        Else 'Если же ошибки нет, то...
            'Выделяем диапазон от этой ячейки до последней заполненной ячейки
            'в столбце, содержащем эту ячейку.
            Set R = Range(R, Cells(Rows.Count, R.Column).End(xlUp))
            'Отключаем обновление экрана, чтобы удаление проходило быстрее.
            Application.ScreenUpdating = False
            'Идем от последней ячейки диапазона к первой и удаляем пустые ячейки.
            'R.Count - количество ячеек в диапазоне.
            'Step -1 - означает, что цикл идет в обратном порядке (от большего к
            'меньшему).
            For i = R.Count To 1 Step -1
                If IsEmpty(R.Cells(i)) Then R.Cells(i).Delete
            Next i
            'Включаем обновление экрана.
            Application.ScreenUpdating = True
            'Конец работы.
        End If
    End Sub

    Но вариант Казанского со SpecialCells мне нравится больше.

    С уважением,

    Aksima



    1



    0 / 0 / 0

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

    Сообщений: 22

    14.04.2013, 21:45

     [ТС]

    7

    Казанский и Aksima ОГРОМНОЕ ВАМ СПАСИБО!!!



    0



    Понравилась статья? Поделить с друзьями:
  • Excel макрос удаление ячеек по условию
  • Excel макрос удаление строк при условии если
  • Excel макрос удаление пустых строк в столбце
  • Excel макрос удаление объектов
  • Excel макрос удаление значения ячейки