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

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

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

Давайте рассмотрим несколько способов решения этой задачи.

Способ 1. Поиск пустых ячеек

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

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

Исходные данные

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

  1. Выделяем диапазон с городами (B2:B26)
  2. Нажимаем клавишу F5 и затем кнопку Выделить (Go to Special) или выбираем на вкладке Главная — Найти и выделить — Выделить группу ячеек (Home — Find&Select — Go to special).
  3. В открывшемся окне выбираем опцию Пустые ячейки (Blanks) и жмём ОК – должны выделиться все пустые ячейки в первом столбце нашей таблицы.
  4. Теперь выбираем на вкладке Главная команду Удалить — Удалить строки с листа (Delete — Delete rows) или жмём сочетание клавиш Ctrl+минус — и наша задача решена.

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

Способ 2. Поиск незаполненных строк

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

Взгляните, например, на следующую таблицу — как раз такой случай:

Исходные данные с пустыми ячейками

Здесь подход будет чуть похитрее:

  1. Введём в ячейку A2 функцию СЧЁТЗ (COUNTA), которая вычислит количество заполненных ячеек в строке правее и скопируем эту формулу вниз на всю таблицу:

    Считаем количество заполненных ячеек

  2. Выделим ячейку А2 и включим фильтр командой Данные — Фильтр (Data — Filter) или сочетанием клавиш Ctrl+Shift+L.
  3. Отфильтруем по вычисленному столбцу нули, т.е. все строки, где нет данных.
  4. Осталось выделить отфильтрованные строки и удалить их командой Главная — Удалить -’ Удалить строки с листа (Home — Delete — Delete rows) или сочетанием клавиш Ctrl+минус.
  5. Отключаем фильтр и получаем наши данные без пустых строк.

К сожалению, со столбцами такой трюк уже не проделать – фильтровать по столбцам Excel пока не научился.

Способ 3. Макрос удаления всех пустых строк и столбцов на листе

Для автоматизации подобной задачи можно использовать и простой макрос. Нажмите сочетание клавиш Alt+F11 или выберите на вкладке Разработчик — Visual Basic (Developer — Visual Basic Editor). Если вкладки Разработчик не видно, то можно включить ее через Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon).

В открывшемся окне редактора Visual Basic выберите команду меню Insert — Module и в появившийся пустой модуль скопируйте и вставьте следующие строки:

 
Sub DeleteEmpty()
    Dim r As Long, rng As Range

    'удаляем пустые строки
    For r = 1 To ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
        If Application.CountA(Rows(r)) = 0 Then
            If rng Is Nothing Then Set rng = Rows(r) Else Set rng = Union(rng, Rows(r))
        End If
    Next r
    If Not rng Is Nothing Then rng.Delete
    
    'удаляем пустые столбцы
    Set rng = Nothing
    For r = 1 To ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
        If Application.CountA(Columns(r)) = 0 Then
            If rng Is Nothing Then Set rng = Columns(r) Else Set rng = Union(rng, Columns(r))
        End If
    Next r
    If Not rng Is Nothing Then rng.Delete

End Sub

Закройте редактор и вернитесь в Excel. 

Теперь нажмите сочетание Alt+F8 или кнопку Макросы на вкладке Разработчик. В открывшемся окне будут перечислены все доступные вам в данный момент для запуска макросы, в том числе только что созданный макрос DeleteEmpty. Выберите его и нажмите кнопку Выполнить (Run) — все пустые строки и столбцы на листе будут мгновенно удалены.

Способ 4. Запрос Power Query

Ещё один способ решить нашу задачу и весьма частый сценарий — это удаление пустых строк и столбцов в Power Query.

Сначала давайте загрузим нашу таблицу в редактор запросов Power Query. Можно конвертировать её в динамическую «умную» сочетанием клавиш Ctrl+T или же просто выделить наш диапазон данных и дать ему имя (например Данные) в строке формул, преобразовав в именованный:

Присваиваем имя диапазону данных

Теперь используем команду Данные — Получить данные — Из таблицы/диапазона (Data — Get Data — From table/range) и грузим всё в Power Query:

Загруженные в Power Query данные

Дальше всё просто:

  1. Удаляем пустые строки командой Главная — Сократить строки — Удалить строки — Удалить пустые строки (Home — Remove Rows — Remove empty rows).
  2. Щёлкаем правой кнопкой мыши по заголовку первого столбца Город и выбираем в контекстном меню команду Отменить свёртывание других столбцов (Unpivot Other Columns). Наша таблица будет, как это технически правильно называется, нормализована — преобразована в три столбца: город, месяц и значение с пересечения города и месяца из исходной таблицы. Особенность этой операции в Power Query в том, что она пропускает в исходных данных пустые ячейки, что нам и требуется:

    Отмена свертывания (unpivot) таблицы

  3. Теперь выполяем обратную операцию — сворачиваем полученную таблицу обратно в двумерную, чтобы вернуть ей исходный вид. Выделяем столбец с месяцами и на вкладке Преобразование выбираем команду Столбец сведения (Transform — Pivot Column). В открывшемся окне в качестве столбца значений выбираем последний (Значение), а в расширенных параметрах — операцию Не агрегировать (Don’t aggregate):

    Сворачиваем обратно

  4. Останется выгрузить результат обратно в Excel командой Главная — Закрыть и загрузить — Закрыть и загрузить в… (Home — Close&Load — Close&Load to…)

    Результат

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

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

В данном примере предоставлены и описаны исходные коды VBA-макросов для работы с пустыми столбцами в таблице Excel.

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

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

Таблица поквартального бюджета.

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

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

редактор VB.

В редакторе создайте новый модуль выбрав инструмент: «Insert»-«Module» и введите в него этот VBA-код макроса:

Insert-Module.

Sub SelectColumn()
  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.Columns.Count
If WorksheetFunction.CountA(diapaz1.Columns(i).EntireColumn) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Columns(i).EntireColumn
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Columns(i).EntireColumn)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодного пустого столбца!"
Else
diapaz2.Select
End If
End Sub

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

Выделить пустые столбцы.

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

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

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

Далее в цикле поочередно проверяется каждый столбец в диапазоне ячеек определенным в переменной diapaz1. Если в столбце количество ячеек со значением равно 0, то целый столбец добавляется к несмежному диапазону, определенному в переменной diapaz2.

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



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

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

diapaz2.[Delete]

Удалить пустые столбцы макросом:

Sub DelColumn()
  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.Columns.Count
If WorksheetFunction.CountA(diapaz1.Columns(i).EntireColumn) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Columns(i).EntireColumn
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Columns(i).EntireColumn)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодного пустого столбца!"
Else
diapaz2.[Delete]
End If
End Sub

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

Удалить столбцы.

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

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

diapaz2.EntireRow.Hidden = True

Скрыть пустые столбцы макросом:

Sub HidColumn()
  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.Columns.Count
If WorksheetFunction.CountA(diapaz1.Columns(i).EntireColumn) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Columns(i).EntireColumn
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Columns(i).EntireColumn)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодного пустого столбца!"
Else
diapaz2.EntireColumn.Hidden = True
End If
End Sub

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

Скрыть.

Добавление пустых столбцов макросом

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

diapaz2.[Insert]

Добавить пустые столбцы макросом:

Sub AddColumn()
  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.Columns.Count
If WorksheetFunction.CountA(diapaz1.Columns(i).EntireColumn) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Columns(i).EntireColumn
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Columns(i).EntireColumn)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодного пустого столбца!"
Else
diapaz2.[Insert]
End If
End Sub

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

Добавить пустой столбец.

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

Читайте также: Как выделить строки в Excel макросом.

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

This macro will delete columns which are completely empty. This means that if there is no data within the entire column it will be removed. This macro works on a selection of cells within the excel spreadsheet. That means that you must select cells and then run the macro for it to do anything.

Note: The first macro will work for Excel 2007 whereas the second macro will work for Previous Excel Versions. This is due to the change in the number of rows from previous excel versions to Excel 2007.

Where to install the macro:  Module

Delete Empty Columns (Excel 2007 and Beyond)

Sub Delete_Empty_Columns()

first = Selection.Column
last = Selection.Columns(Selection.Columns.Count).Column

 For i = last To first Step -1

  If WorksheetFunction.CountBlank(ActiveSheet.Columns(i)) = 1048576 Then
   Columns(i).Delete
  End If

 Next i
End Sub

Delete Empty Columns (Previous Versions of Excel)

Sub Delete_Empty_Columns()

first = Selection.Column
last = Selection.Columns(Selection.Columns.Count).Column

 For i = last To first Step -1

   If WorksheetFunction.CountBlank(ActiveSheet.Columns(i)) = 65536 Then
   Columns(i).Delete
  End If

Next i
End Sub


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Delete Empty or ‘Broken’ Named Ranges (#REF!)

Macro: This macro will delete named ranges which refer to empty or #REF! ranges. This means that …

Special Cell Magic — Finding/Deleting Empty Rows, Working with Filtered Data & More

: How to use SpecialCells to get sub-sets of ranges/cells in the worksheet and then do more …

Delete All Empty Rows or Blank Cells from a Range in Excel

Tutorial: How to quickly delete all empty cells or rows from a range in Excel. 
This allows you to …

Delete Rows in Excel if Completely Empty

Macro: This macro will delete only completely blank rows in an excel spreadsheet. It allows you t…

Delete Blank Rows in Excel

Macro: This is a macro which will delete blank rows in excel. This version will delete an entire …

Delete Entire Rows Based on Predefined Criteria (Text)

Macro: This macro will allow you to specify certain criteria and then to delete rows based up…

How to Install the Macro

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  8. Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
  9. You are now ready to run the macro.

Skip to content

Как удалить пустые столбцы

На чтение 3 мин. Просмотров 2.3k.

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

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

В этом макросе, мы используем свойство UsedRange объекта ActiveSheet, чтобы определить диапазон, с которым мы работаем. Свойство UsedRange дает диапазон, который охватывает ячейки, которые были использованы для ввода данных. Затем устанавливает счетчик, который начинается с последнего столбца, используемого диапазона, проверяя, весь ли столбец пуст. Если весь столбец действительно пуст, мы удалим столбец. Мы продолжаем делать то же самое для каждого цикла, каждый раз, когда приращение счетчика двигается к предыдущей колонке.

Код макроса

Sub UdalitPustieStolbci()
' Шаг 1: объявляем переменные
Dim MyRange As Range
Dim iCounter As Long
'Шаг 2: Определяем целевой диапазон 
Set MyRange = ActiveSheet.UsedRange
'Шаг 3: Запускаем обратный цикл через диапазон
For iCounter = MyRange.Columns.Count To 1 Step -1
'Шаг 4: Если весь столбец пуст, то удаляем его
If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then
Columns(iCounter).Delete
End If
' Шаг 5: Увеличиваем счетчик
Next iCounter
End Sub

Как этот код работает

  1. Шаг 1 объявляет две переменные. Первая переменная является переменной объекта под названием MyRange. Это переменная объекта, который определяет целевой диапазон. Другая переменная является переменной Long Integer называется iCounter.
  2. Шаг 2 заполняет переменную MyRange со свойством UsedRange объекта ActiveSheet. Свойство UsedRange дает диапазон, который охватывает клетки, которые были использованы для ввода данных. Обратите внимание, что если мы хотим указать фактический диапазон или именованный диапазон, мы могли бы просто ввести свое название — Range («MyNamedRange»).
  3. На этом этапе макрос устанавливает параметры для нашего инкрементного счетчика, чтобы начать на максимальном количестве для диапазона (MyRange.Columns.Count) и заканчивается в 1 (первая строка выбранного диапазона). Обратите внимание, что мы используем Шаг-1 классификатор. Поскольку мы указываем шаг -1, Excel знает, что мы будем увеличивать счетчик в обратном направлении; перемещение назад один шаг на каждой итерации. В целом, Шаг 3 говорит Excel, что мы хотим, чтобы начать в последнем столбце выбранного диапазона, двигаясь назад, пока мы не получим в первом столбце диапазона. При работе с диапазоном, вы можете явно вызывать определенный столбец в диапазоне, передавая номер столбца индекса к коллекции Columns диапазона. Например, Range («A1: D17»). Columns(2) указывает на второй столбец в диапазоне (столбец B).
  4. На шаге 4, макрос использует переменную iCounter как номер индекса для коллекции Columns MyRange. Это помогает определить, каким именно столбцом мы работаем в текущем цикле. Макрос проверяет все ячейки в этом столбце, являются ли они пустыми. Если они есть, макрос удаляет весь столбец.
  5. На шаге 5, макрос возвращается к началу цикла увеличивать счетчик.

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

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши personal.xlb в окне Project.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

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

Стандартные способы удаления пустых столбцов

Удаление  вручную

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

Удаление при помощи сортировки

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

Удаление при помощи выделения группы ячеек

Для того чтобы удалить пустые столбцы в Excel 2007 и 2010 можно воспользоваться возможностью выделения группы ячеек. Для этого выделяем строку, содержащую пустые ячейки, после чего находим на ленте Excel вкладку «Главная», в группе «Редактирование» выбираем кнопку «Найти и выделить» и выбираем пункт «Выделение группы ячеек». В появившемся диалоговом окне «Выделение группы ячеек» включаем опцию «Пустые ячейки» и нажимаем кнопку ОК. В предварительно выделенной строке будут выделены все пустые ячейки. Остается кликнуть правой кнопкой мыши в любом месте выделенного поля и выбрать пункт «Удалить…» в контекстном меню, а в появившемся диалоговом окне «Удаление ячеек» выбрать пункт «Столбец» и нажать ОК. При этом, строго говоря, будут удалены не пустые столбцы, а столбцы, содержащие пустые ячейки в предварительно выделенной строке.

Нестандартные методы удаления пустых столбцов

Программное удаление макросом VBA

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

Sub Udalenie_Pustyh_Stolbtsov()
Dim c As Long, FirstColumn As Long, LastColumn As Long
FirstColumn = ActiveSheet.UsedRange.Column
LastColumn = ActiveSheet.UsedRange.Columns.Count - 1 + ActiveSheet.UsedRange.Column
    For c = LastColumn To FirstColumn Step -1
        If Application.CountA(Columns(c)) = 0 Then
            Columns(c).Delete
        End If
    Next c
End Sub

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

Автоматическое удаление с использованием надстройки

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

Udalenie-i-skrytie-stolbtsov-po-neskolkim-usloviyam

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

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

Vyborochnoe-udalenie-yacheek-po-usloviyu

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

Skip to content

Быстрое удаление пустых столбцов в Excel

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

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

Итак, как мы будем решать проблему удаления пустых столбцов?

  • Способ 1 — быстрый, но неправильный.
  • Способ 2 — макрос VBA.
  • Способ 3 — используем формулы.
  • Способ 4 — самый быстрый, одной кнопкой.
  • Почему не удаляются пустые столбцы?

Быстрый, но неправильный способ удалить пустые столбцы.

Когда дело доходит до удаления пустот в таблице в Excel (будь то пустые ячейки, строки или столбцы), многие пользователи полагаются на команду Найти и выделитьНикогда не делайте этого на своих листах!

Этот метод ( Найти и выделить > Группу ячеек > Пустые ) находит и выбирает все пустые ячейки в диапазоне:

Если теперь щелкнуть выделенные ячейки правой кнопкой мыши и выбрать «Удалить» > « Весь столбец», то все колонки, содержащие хотя бы одну пустую ячейку, будут потеряны! Если вы сделали это случайно, нажмите Ctrl + Z , чтобы вернуть все на место.

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

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

Опытные пользователи Excel знают это практическое правило: чтобы не тратить часы на что-то вручную, потратьте несколько минут на написание макроса, который сделает это за вас автоматически.

Приведенный ниже макрос VBA удаляет все пустые столбцы в выбранном диапазоне. И делает это безопасно — удаляются только абсолютно пустые. Если столбец содержит значение хотя бы в одной ячейке, пусть даже пустую строку (“”), возвращаемую какой-либо формулой, то он останется на листе.

Public Sub DeleteEmptyColumns()
Dim SourceRange As Range
Dim EntireColumn As Range

On Error Resume Next
Set SourceRange = Application.InputBox( _
    "Select a range:", "Delete Empty Columns", _
    Application.Selection.Address, Type:=8)

If Not (SourceRange Is Nothing) Then
    Application.ScreenUpdating = False
    For i = SourceRange.Columns.Count To 1 Step -1
        Set EntireColumn = SourceRange.Cells(1, i).EntireColumn
        If Application.WorksheetFunction.CountA(EntireColumn) = 0 Then
            EntireColumn.Delete
        End If
    Next
    Application.ScreenUpdating = True
End If

End Sub

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

Как использовать макрос удаления пустых столбцов

Вот пошаговая инструкция, чтобы добавить макрос в ваш файл Excel:

  1. Нажмите Alt + F11 , чтобы открыть редактор Visual Basic.
  2. В строке меню щелкните Вставить > Модуль (Insert > Module).
  3. Вставьте приведенный выше код в появившееся окно. Нажмите иконку дискеты и сохраните проект.
  4. Если окно модуля еще открыто, то нажмите F5 для запуска макроса. В последующем для вызова программы используйте комбинацию Alt+F8.
  5. Когда появится всплывающее диалоговое окно, переключитесь на интересующий рабочий лист, выберите нужный диапазон и нажмите OK:

Пустые колонки в выбранном диапазоне будут удалены:

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

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

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

Примечание. Прежде чем удалять что-либо навсегда, особенно с помощью неопробованного вами метода, я настоятельно рекомендую вам сделать резервную копию своей книги, на всякий случай, если что-то пойдет не так.

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

Шаг 1. Вставьте новую строку.

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

Шаг 2. Найдите пустые столбцы.

В самой левой ячейке только что добавленной строки введите следующую формулу:

=СЧЁТЗ(A2:A1048576)=0

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

Логика формулы очень проста: СЧЁТЗ проверяет количество пустых ячеек в столбце, от строки 2 до строки 1048576, что является максимумом числа строк в Excel 2019–2007. Вы сравниваете это число с нулем и в результате получаете ИСТИНА в пустых и ЛОЖЬ там, где имеется хотя бы одна непустая ячейка. Благодаря использованию относительных ссылок формула правильно настраивается для каждого столбца, в который она скопирована.

Если вы настраиваете лист для кого-то другого, вы можете пометить их более явным и понятным образом. Нет проблем, это легко сделать с помощью функции ЕСЛИ, примерно так:

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

Теперь формула явным образом указывает, какие колонки пусты, а какие нет:

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

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

Шаг 3. Удалите пустые столбцы.

Теперь вы можете просто выбрать те колонки, у которых в первой строке записано «Пусто» (чтобы выбрать сразу несколько, удерживайте Ctrl , нажимая на их буквы). Затем щелкните правой кнопкой мыши на любом из выделенных столбцов и укажите команду «Удалить» в контекстном меню:

Если на вашем листе десятки или сотни колонок, имеет смысл вывести на просмотр все пустые. Для этого сделайте следующее:

  1. Выберите верхнюю строку с формулами, перейдите на вкладку «Данные» > группу « Сортировка и фильтр » и нажмите кнопку «Сортировка» .
  2. В появившемся диалоговом окне с предупреждением выберите «Развернуть выделение» и нажмите «Сортировать…».

  1. Откроется диалоговое окно «Сортировка», в котором вы нажмете кнопку «Параметры…», выберите «столбцы диапазона» и нажмите «ОК» .

  1. Настройте только один уровень сортировки, как показано ниже, и нажмите ОК:
    • Сортировать по: Строка 1
    • Сортировка: значения ячеек
    • Порядок: от А до Я

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

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

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

Выполнено! Вы избавились от пустых столбцов, и теперь нет ничего, что могло бы помешать вам удалить верхнюю строку с формулами.

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

В начале этого руководства я написал, что в Excel нет способа расправиться с пустыми столбцами одним щелчком мыши. На самом деле это не совсем так. Я должен был сказать, что нет таких стандартных возможностей в самом Excel. Пользователи надстройки Ultimate Suite могут удалить их почти автоматически, буквально за пару кликов :)

На вашем листе переключитесь на вкладку AblebitsTools, нажмите Delete Blanks и выберите Пустые столбцы (Empty Columns):

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

Нажмите ОК, и через мгновение все незаполненные колонки исчезнут!

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

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

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

Пустые столбцы не удаляются! Почему?

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

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

Чтобы определить виновника, выберите первую ячейку в проблемном месте и нажмите Ctrl + стрелка вниз. И вы сразу же переместитесь к первой непустой ячейке. Например, столбец B на скриншоте ниже не является пустым из-за символа пробела в B6:

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

А затем повторите описанный выше процесс, чтобы узнать, есть ли ниже ещё какие-либо другие невидимые объекты. Вы также можете очистить свои данные, удалив начальные, конечные и неразрывные пробелы.

Благодарю вас за чтение и надеюсь увидеть вас в нашем блоге снова!

MulTEx »

1 Май 2011              19542 просмотров

Удаление пустых столбцов на листе

Данная функция является частью надстройки MulTEx


 
Вызов команды:
MulTEx -группа Ячейки/ДиапазоныРабота со строками/СтолбцамиУдаление пустых столбцов


Команда удаляет пустые столбцы в таблице. Пустым столбцом считается столбец, ни одна из ячеек которого не содержит ни значений, ни формул. Чтобы воспользоваться командой нажимаете кнопку MulTEx_Icons_DeleteCols, появляется предупреждение:
Запрос
В зависимости от Вашего выбора столбцы либо удаляться, либо выполнение команды будет прервано.

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

  • В Excel 2010-2013 это значение можно поменять зайдя в: ФайлПараметрыДополнительно
  • В Excel 2007 это значение можно поменять зайдя в: МенюПараметры ExcelДополнительно
  • В 2003: МенюПараметры — вкладка ВидНулевые значения

Так же см.:
Добавление столбцов

Удалить пустые столбцы со второй строки

Dilemma086

Дата: Суббота, 07.05.2016, 11:42 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

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

Код

Sub Удалить_Столбы_Пустые ()
Dim C As Long, FirstColumn As Long, LastColumn As Long
FirstColumn = ActiveWorkbook.ActiveSheet.UsedRange.Column
LastColumn = ActiveWorkbook.ActiveSheet.UsedRange.Columns.Count — 1 + ActiveWorkbook.ActiveSheet.UsedRange.Column
    For C = LastColumn To FirstColumn Step -1
        If Application.CountA(Columns(C)) = 0 Then
            Columns(C).Delete
        End If
    Next C

    End Sub

[/vba]

Сообщение отредактировал Dilemma086Суббота, 07.05.2016, 11:43

 

Ответить

_Boroda_

Дата: Суббота, 07.05.2016, 12:58 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

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

Это как Вы себе представляете? Вот у Вас есть таблица

Вы хотите удалить столбцы н3 и н5, не удаляя текст н3 и н5. Тогда 2 варианта — или Вы хотите удалить содержимое этих столбцов (но зачем, если там и так ничего нет), или Вы хотите сместить данные влево — тогда у Вас «с» будет под н3, а «d» будет под н4, а под н5 и н6 ничего не будет.

К сообщению приложен файл:

1329278.jpg
(11.4 Kb)


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

KuklP

Дата: Суббота, 07.05.2016, 13:33 |
Сообщение № 3

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Саш, подозреваю, что ТС хочет удалить столбцы, где кроме заголовка ничего нет, т.е:
[vba]

Код

        If Application.CountA(Columns(C)) = 1 Then
            Columns(C).Delete
        End If

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

_Boroda_

Дата: Суббота, 07.05.2016, 14:00 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

ТС хочет удалить столбцы, где кроме заголовка ничего нет

А, ну тогда предлагаю учесть еще вариант, когда заголовка нет, а ниже что-то есть. И вариант, когда заголовка нет и ниже ничего нет, но правее все-таки что-то есть
[vba]

Код

        If (Application.CountA(Columns(C)) = 1 And Cells(1, C) <> «») Or Application.CountA(Columns(C)) = 0 Then
            Columns(C).Delete
        End If

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Dilemma086

Дата: Суббота, 07.05.2016, 15:24 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Вот так выглядит таблица, здесь удалить нужно столбцы AD и AE


Это работает:
[vba]

Код

If Application.CountA(Columns(C)) = 1 Then
            Columns(C).Delete
        End If

[/vba]
Спасибо большое, очень признателен за помощь!

 

Ответить

Koneu

Дата: Вторник, 13.08.2019, 17:00 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Подскажите пож-та вставляю данный макрос но у меня не удаляются столбцы… что сделал ни так

К сообщению приложен файл:

3810503.xlsm
(34.9 Kb)

 

Ответить

Pelena

Дата: Вторник, 13.08.2019, 17:06 |
Сообщение № 7

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Koneu, надо взять весь макрос из первого поста и заменить строки


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Koneu

Дата: Вторник, 13.08.2019, 17:21 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Pelena, Спасибо ))))) научился )

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макрос для сортировки листов в excel
  • Макрос для создания файла excel
  • Макрос для создания таблиц в word
  • Макрос для создания списка в excel
  • Макрос для создания сводных таблиц excel