- VBA Удалить столбец
VBA Удалить столбец
Копирование, вставка, вырезание, удаление, вставка — это некоторые из общих операций, используемых для выполнения в Excel. Самый простой способ сделать это, используя сочетания клавиш или встроенные функции. Но когда вы хотите выполнить операцию в один клик или автоматически, VBA является решением. Мы можем автоматизировать эти задачи, используя макросы Excel. VBA также предоставляет различные методы, аналогичные функциям Excel. Это выполняет эти задачи плавно в VBA.
Метод удаления столбцов используется для удаления одного или нескольких столбцов в Excel VBA. Свойство delete для столбцов используется вместе с индексом столбца.
Синтаксис для удаления столбца в Excel VBA
Синтаксис для удаления столбца в Excel, как показано ниже.
Столбцы (Ссылка на столбец). удалять
- Где ссылка на столбец — это номер столбца, который вы хотите удалить.
- Столбцы ((RowIndex), ColumnIndex)) здесь диапазон столбцов также принимается.
Как удалить столбец в Excel с помощью VBA?
Мы узнаем, как удалить столбец в VBA, с несколькими примерами в Excel.
Вы можете скачать этот шаблон Excel VBA Удалить столбец здесь — VBA Удалить шаблон Excel столбца
VBA Удалить столбец — Пример № 1
Из базы данных посещаемости указывается время отъезда в офис для некоторых сотрудников. Это данные, собранные за одну неделю, с понедельника по пятницу.
Мы хотим удалить столбец пятница.
Выполните следующие шаги, чтобы удалить столбец в Excel.
Шаг 1: Итак, сначала мы можем создать простую функцию как delete (), поскольку delete — это ключевое слово, которое не является предпочтительным.
Код:
Private Sub delete () Конец Sub
Шаг 2: Теперь давайте использовать свойство columns.
Код:
Private Sub delete () Столбцы (6) .delete End Sub
В столбцах () упоминается «6», поскольку указанный столбец является 6- м столбцом в таблице.
Шаг 3: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Если вы проверите таблицу, она будет выглядеть так, как показано ниже. Где столбец пятница был удален.
VBA Удалить столбец — Пример № 2
Другой простой способ выполнить удаление — указать ссылку на столбец в алфавитном порядке.
Выполните следующие шаги, чтобы удалить столбец в Excel с помощью VBA.
Шаг 1: Поскольку пятница — это столбец F, укажите адрес столбца, как показано ниже в коде.
Код:
Private Sub delete1 () Столбцы ("F"). Delete End Sub
При использовании алфавита не забудьте поставить алфавит в двойных кавычках.
Шаг 2: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Это удалит столбец пятница из таблицы.
VBA Удалить столбец — Пример № 3
В той же таблице, если вы хотите удалить более одного столбца, следует указать диапазон столбцов.
Выполните следующие шаги, чтобы удалить последние два столбца в Excel.
Шаг 1: Код можно изменить, как показано ниже.
Код:
Private Sub delete2 () Столбцы ("E: F"). Delete End Sub
Диапазон указан как «E: F», и это приведет к удалению столбца от F до G.
Шаг 2: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Последние два столбца удалены.
VBA Удалить столбец — Пример № 4
Посмотрим, что будет, если мы удалим средние столбцы в таблице.
Выполните следующие шаги, чтобы удалить средние столбцы в таблице.
Шаг 1: Код можно изменить, как показано ниже.
Код:
Частные Sub столбцы delete3 () ("B: C"). Delete End Sub
Здесь «B: C» относится к колонке понедельник и вторник.
Шаг 2: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
После запуска кода, если вы проверите таблицу, вы можете увидеть столбец после смещения «B: C» справа налево.
VBA Удалить столбец — Пример № 5
В приведенном выше примере мы не упомянули имя рабочего листа. Если рабочая книга содержит более одного листа, то следует указать имя рабочего листа, тогда только код выполнит правильное действие.
На двух листах содержатся сведения о сотрудниках за два месяца, январь и февраль. Поскольку на одном листе имеется более одного листа, чтобы избежать ошибок, лучше указать имя листа.
Выполните следующие шаги, чтобы удалить столбец в Excel с помощью VBA.
Шаг 1: лист должен быть выбран с помощью кода.
Код:
Частный Sub Delete4 () Рабочие листы ("Январь"). Выберите End Sub
Шаг 2: Теперь нужно указать код для удаления столбца.
Код:
Private Sub delete () Worksheets ("Jan"). Выберите столбцы ("B: C"). Delete End Sub
Шаг 3: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Будет выбран лист «Jan», а столбцы B, C, т.е. понедельник, вторник, будут удалены из таблицы.
Удаление нескольких столбцов с использованием объекта диапазона в VBA
Объект диапазона также используется для удаления столбца в VBA вместо удаления столбца. Если используется объект диапазона, код будет выглядеть так, как показано ниже.
Частный Sub Удалить () Диапазон ("B: C"). Удалить End Sub
Диапазон («B: C») представляет собой диапазон столбцов, который необходимо удалить.
Удаление одного столбца с использованием объекта диапазона
Чтобы удалить один столбец с использованием объекта диапазона, необходимо указать диапазон, как показано ниже.
Частный диапазон Sub delete () ("B: B"). Удалить End Sub
Диапазон («B: B») указывает на один столбец, и он будет удален.
То, что нужно запомнить
- Столбец может быть указан с помощью номера столбца или соответствующего алфавита при удалении.
- При удалении нескольких столбцов номера не будут приняты в качестве ссылки на столбец.
- Вместо свойства столбцов можно использовать объект Range для удаления столбца в VBA.
Рекомендуемые статьи
Это руководство по удалению столбца VBA. Здесь мы обсудили, как удалить столбец в Excel с помощью VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —
- Удаление строки с помощью VBA
- Excel Переместить столбцы
- Транспонировать диапазон в VBA
- Excel Удалить строку ярлык
Удаление пустых строк и столбцов в данных
Пустые строки и столбцы могут быть головной болью в таблицах во многих случаях. Стандартные функции сортировки, фильтрации, подведения итогов, создания сводных таблиц и т.д. воспринимают пустые строки и столбцы как разрыв таблицы, не подхватывая данные, расположенные за ними далее. Если таких разрывов много, то удалять их вручную может оказаться весьма затратно, а удалить сразу всех «оптом», используя фильтрацию не получится, т.к. фильтр тоже будет «спотыкаться» на разрывах.
Давайте рассмотрим несколько способов решения этой задачи.
Способ 1. Поиск пустых ячеек
Это, может, и не самый удобный, но точно самый простой способ вполне достойный упоминания.
Предположим, что мы имеем дело вот с такой таблицей, содержащей внутри множество пустых строк и столбцов (для наглядности выделены цветом):
Допустим, мы уверены, что в первом столбце нашей таблицы (колонка B) всегда обязательно присутствует название какого-либо города. Тогда пустые ячейки в этой колонке будут признаком ненужных пустых строк. Чтобы быстро их все удалить делаем следующее:
- Выделяем диапазон с городами (B2:B26)
- Нажимаем клавишу F5 и затем кнопку Выделить (Go to Special) или выбираем на вкладке Главная — Найти и выделить — Выделить группу ячеек (Home — Find&Select — Go to special).
- В открывшемся окне выбираем опцию Пустые ячейки (Blanks) и жмём ОК – должны выделиться все пустые ячейки в первом столбце нашей таблицы.
- Теперь выбираем на вкладке Главная команду Удалить — Удалить строки с листа (Delete — Delete rows) или жмём сочетание клавиш Ctrl+минус — и наша задача решена.
Само-собой, от пустых столбцов можно избавиться совершенно аналогично, взяв за основу шапку таблицы.
Способ 2. Поиск незаполненных строк
Как вы, возможно, уже сообразили, предыдущий способ сработает только в том случае, если в наших данных обязательно присутствую полностью заполненные строки и столбцы, за которые можно зацепиться при поиске пустых ячеек. Но что, если такой уверенности нет, и в данных могут содержаться и пустые ячейки в том числе?
Взгляните, например, на следующую таблицу — как раз такой случай:
Здесь подход будет чуть похитрее:
-
Введём в ячейку A2 функцию СЧЁТЗ (COUNTA), которая вычислит количество заполненных ячеек в строке правее и скопируем эту формулу вниз на всю таблицу:
- Выделим ячейку А2 и включим фильтр командой Данные — Фильтр (Data — Filter) или сочетанием клавиш Ctrl+Shift+L.
- Отфильтруем по вычисленному столбцу нули, т.е. все строки, где нет данных.
- Осталось выделить отфильтрованные строки и удалить их командой Главная — Удалить - Удалить строки с листа (Home — Delete — Delete rows) или сочетанием клавиш Ctrl+минус.
- Отключаем фильтр и получаем наши данные без пустых строк.
К сожалению, со столбцами такой трюк уже не проделать – фильтровать по столбцам 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:
Дальше всё просто:
- Удаляем пустые строки командой Главная — Сократить строки — Удалить строки — Удалить пустые строки (Home — Remove Rows — Remove empty rows).
- Щёлкаем правой кнопкой мыши по заголовку первого столбца Город и выбираем в контекстном меню команду Отменить свёртывание других столбцов (Unpivot Other Columns). Наша таблица будет, как это технически правильно называется, нормализована — преобразована в три столбца: город, месяц и значение с пересечения города и месяца из исходной таблицы. Особенность этой операции в Power Query в том, что она пропускает в исходных данных пустые ячейки, что нам и требуется:
- Теперь выполяем обратную операцию — сворачиваем полученную таблицу обратно в двумерную, чтобы вернуть ей исходный вид. Выделяем столбец с месяцами и на вкладке Преобразование выбираем команду Столбец сведения (Transform — Pivot Column). В открывшемся окне в качестве столбца значений выбираем последний (Значение), а в расширенных параметрах — операцию Не агрегировать (Don’t aggregate):
- Останется выгрузить результат обратно в Excel командой Главная — Закрыть и загрузить — Закрыть и загрузить в… (Home — Close&Load — Close&Load to…)
Ссылки по теме
- Что такое макрос, как он работает, куда копировать текст макроса, как запустить макрос?
- Заполнение всех пустых ячеек в списке значениями вышестоящих ячеек
- Удаление всех пустых ячеек из заданного диапазона
- Удаление всех пустых строк на листе с помощью надстройки PLEX
Команда для макроса. Удаление не нужных мне столбцов. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
1 |
|
06.04.2010, 21:14. Показов 57801. Ответов 16
0 |
paladin 286 / 186 / 7 Регистрация: 25.02.2009 Сообщений: 589 |
|
07.04.2010, 07:47 |
2 |
Если удалять столбец, в котором находится первая ячейка из объединенных, то данные из нее теряются
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
07.04.2010, 14:54 [ТС] |
3 |
To Yurij. Спасибо за ответ, но ситуация не стандартная, таблица большая, в ней много обьединенных ячеек разной длинны, причем размещены на листе асиметрически. Сделать можно, но очень долго. Может есть какое-нибудь решение попроще?
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
08.04.2010, 00:38 |
4 |
Старайся не применять объединение ячеек. С ним всегда столько геморроя
0 |
496 / 130 / 19 Регистрация: 30.03.2010 Сообщений: 224 |
|
08.04.2010, 14:24 |
5 |
Для удаления столбца нужно применить метод Delete, непосредственно к самому столбцу, не выделяя его перед этим Columns(h).Delete ‘удаляет только указанный столбец Columns(h).Select
1 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
11.04.2010, 11:14 [ТС] |
6 |
Для удаления столбца нужно применить метод Delete, непосредственно к самому столбцу, не выделяя его перед этим Columns(h).Delete ‘удаляет только указанный столбец Columns(h).Select Спасибо, работает. Действительно, для контроля я выделял столбец, что в окончательном варианте кода планировалось удалить. Теперь все на месте. Еще раз спасибо.
1 |
24 / 8 / 17 Регистрация: 22.12.2015 Сообщений: 2,099 |
|
01.03.2016, 02:48 |
7 |
у меня есть 6 столбцов и 16 строк как в цикле FOR
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
01.03.2016, 03:03 |
8 |
|||
scherbakovss201, а зачем в цикле?
0 |
24 / 8 / 17 Регистрация: 22.12.2015 Сообщений: 2,099 |
|
01.03.2016, 04:09 |
9 |
вы не знаете какое пользователь в textbox1 ведет значение.Пример для трех хорош.
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
01.03.2016, 09:02 |
10 |
|||
scherbakovss201, а вместо «3» подставить значение текстбокса — не судьба?
0 |
inquisitor 24 / 8 / 17 Регистрация: 22.12.2015 Сообщений: 2,099 |
||||
01.03.2016, 17:19 |
11 |
|||
О так можно удалять без цикла.Круто.А можно ли загрузать(открыть/импортировать) бд екселе на vba
0 |
1 / 1 / 0 Регистрация: 02.03.2017 Сообщений: 3 |
|
17.01.2019, 16:45 |
12 |
Почему у меня компилятор ругается Sheets(«ДГМ»).Range(Columns(8), Columns(20)).Delete Добавлено через 19 минут Добавлено через 33 минуты
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||||||||||||||
17.01.2019, 19:12 |
13 |
|||||||||||||||
DANGER1979, Если в момент удаления лист с именем «ДГМ» не активен, то :
Добавлено через 3 минуты
1 |
DANGER1979 1 / 1 / 0 Регистрация: 02.03.2017 Сообщений: 3 |
||||||||
24.01.2019, 12:38 |
14 |
|||||||
оба эти варианта работает плохо, Мой вариант
т.е. мы удаляем с 8 по последний столбец с данными
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
24.01.2019, 16:34 |
15 |
|||
DANGER1979, 1) Вопрос был «почему у меня компилятор ругается» и не более 2) Два представленных варианта различаются, ибо правильно будет так :
3) Если Вы утверждаете, что результаты, после удаления одних и тех же столбцов, различаются, приложите файл (.xls/.xlsm) оставив там только нужные и обезличенные данные и макросы.
0 |
0 / 0 / 0 Регистрация: 19.03.2018 Сообщений: 13 |
|
19.05.2021, 16:10 |
16 |
Ребята подскажите как удалить 1 нужный мне столбец к примеру «D» со сдвигом влево ?
0 |
Ученик 87 / 69 / 16 Регистрация: 01.04.2020 Сообщений: 247 |
|
21.05.2021, 01:46 |
17 |
lovator, доброго времени суток. Включите макрорекодер для того чтоб записать макрос. Выделите нужный вам столбец и удалите его со сдвигом влево. Остановите запись макроса в макрорекодере, ALT+F11 увидеть свой макрос для удаление столбца. Удачи вам.
0 |
You can use the following methods to delete columns in Excel using VBA:
Method 1: Delete One Column
Sub DeleteColumns()
Columns("C").Delete
End Sub
This particular example will delete column C from the current workbook.
Method 2: Delete All Columns in Range
Sub DeleteColumns()
Columns("B:D").Delete
End Sub
This particular example will delete all columns in the range B through D in the current workbook.
Method 3: Delete Several Specific Columns
Sub DeleteColumns()
Range("B:B, D:D").Delete
End Sub
This particular example will delete columns B and D in the current workbook.
The following examples show how to use each of these methods in practice with the following dataset in Excel:
Example 1: Delete One Column in VBA
We can create the following macro to delete only column C from our dataset:
Sub DeleteColumns()
Columns("C").Delete
End Sub
When we run this macro, we receive the following output:
Notice that only column C (the “Assists” column) has been deleted from the dataset.
Example 2: Delete All Columns in Range
We can create the following macro to delete all columns in the range from B to D:
Sub DeleteColumns()
Columns("B:D").Delete
End Sub
When we run this macro, we receive the following output:
Notice that each column in the range from B to D (the “Points”, “Assists”, and “Rebounds” columns) have been deleted from the dataset.
Example 3: Delete Several Specific Columns
We can create the following macro to delete columns B and D from the dataset:
Sub DeleteColumns()
Range("B:B, D:D").Delete
End Sub
When we run this macro, we receive the following output:
Notice that columns B and D (the “Points” and “Rebounds” columns) have been deleted from the dataset.
Additional Resources
The following tutorials explain how to perform other common tasks in VBA:
VBA: How to Count Number of Rows in Range
VBA: How to Count Number of Used Columns
VBA: How to Find Last Used Column
Skip to content
В этом руководстве вы узнаете, как можно легко удалить пустые столбцы в 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:
- Нажмите
Alt + F11
, чтобы открыть редактор Visual Basic. - В строке меню щелкните Вставить > Модуль (Insert > Module).
- Вставьте приведенный выше код в появившееся окно. Нажмите иконку дискеты и сохраните проект.
- Если окно модуля еще открыто, то нажмите F5 для запуска макроса. В последующем для вызова программы используйте комбинацию Alt+F8.
- Когда появится всплывающее диалоговое окно, переключитесь на интересующий рабочий лист, выберите нужный диапазон и нажмите OK:
Пустые колонки в выбранном диапазоне будут удалены:
Однако, обратите внимание, что колонка, в которой есть название в шапке, но больше нет никакой информации, осталась нетронутой. Эту особенность нужно учитывать. Либо выбирайте при запуске макроса область, не включая в нее шапку таблицы.
Удаление пустых столбцов в Excel с помощью формул.
Вышеупомянутый макрос быстро и просто удаляет пустые столбцы. Но если вы относитесь к тому типу людей, которые «держит все под контролем» (как и я :), вы можете захотеть визуально увидеть те их них, которые будут удалены. В этом примере мы сначала определим пустые столбцы с помощью формулы, чтобы вы могли быстро их просмотреть, а затем удалим все или некоторые из них.
Примечание. Прежде чем удалять что-либо навсегда, особенно с помощью неопробованного вами метода, я настоятельно рекомендую вам сделать резервную копию своей книги, на всякий случай, если что-то пойдет не так.
Сохранив резервную копию в надежном месте, выполните следующие действия:
Шаг 1. Вставьте новую строку.
Добавьте новую строку вверху таблицы. Для этого щелкните правой кнопкой мыши заголовок первой строки и выберите Вставить. Не беспокойтесь о нарушении структуры таблицы и расположения ваших данных — вы сможете удалить её позже.
Шаг 2. Найдите пустые столбцы.
В самой левой ячейке только что добавленной строки введите следующую формулу:
=СЧЁТЗ(A2:A1048576)=0
Затем скопируйте формулу по строке на сколько это необходимо, перетащив маркер заполнения вправо.
Логика формулы очень проста: СЧЁТЗ проверяет количество пустых ячеек в столбце, от строки 2 до строки 1048576, что является максимумом числа строк в Excel 2019–2007. Вы сравниваете это число с нулем и в результате получаете ИСТИНА в пустых и ЛОЖЬ там, где имеется хотя бы одна непустая ячейка. Благодаря использованию относительных ссылок формула правильно настраивается для каждого столбца, в который она скопирована.
Если вы настраиваете лист для кого-то другого, вы можете пометить их более явным и понятным образом. Нет проблем, это легко сделать с помощью функции ЕСЛИ, примерно так:
=ЕСЛИ(СЧЁТЗ(A2:A1048576)=0;»Пусто»;»Не пусто»)
Теперь формула явным образом указывает, какие колонки пусты, а какие нет:
По сравнению с макросом этот метод дает больше гибкости в отношении того, какие колонки следует считать пустыми. В этом примере мы проверяем всю таблицу, включая строку заголовка. Это означает, что если столбец содержит только заголовок, то он не считается пустым и не удаляется. Если вы хотите проверять только строки данных, игнорируя заголовки, исключите строку (строки) заголовка из целевого диапазона. В результате он будет, к примеру, A3: A1048576. Имеющий заголовок, но не содержащий других данных, будет считаться пустым и посему подлежит удалению.
Кроме того, для быстроты расчетов вы можете ограничить диапазон до последней реально использованной в вашей таблице строки, которой в нашем случае будет A11.
Шаг 3. Удалите пустые столбцы.
Теперь вы можете просто выбрать те колонки, у которых в первой строке записано «Пусто» (чтобы выбрать сразу несколько, удерживайте Ctrl , нажимая на их буквы). Затем щелкните правой кнопкой мыши на любом из выделенных столбцов и укажите команду «Удалить» в контекстном меню:
Если на вашем листе десятки или сотни колонок, имеет смысл вывести на просмотр все пустые. Для этого сделайте следующее:
- Выберите верхнюю строку с формулами, перейдите на вкладку «Данные» > группу « Сортировка и фильтр » и нажмите кнопку «Сортировка» .
- В появившемся диалоговом окне с предупреждением выберите «Развернуть выделение» и нажмите «Сортировать…».
- Откроется диалоговое окно «Сортировка», в котором вы нажмете кнопку «Параметры…», выберите «столбцы диапазона» и нажмите «ОК» .
- Настройте только один уровень сортировки, как показано ниже, и нажмите ОК:
- Сортировать по: Строка 1
- Сортировка: значения ячеек
- Порядок: от А до Я
В результате пустые колонки будут перемещены в правую часть вашего рабочего листа, в конец таблицы:
Если вы выберете порядок сортировки от Я до А, то переместите их в левую чсть вашего листа, в начало.
- Выберите все пустые столбцы в конце таблицы. Для этого щелкните букву первого из них, нажмите Shift, а затем кликните на букву последнего.
- Щелкните правой кнопкой мыши на выделенном и выберите пункт «Удалить» во всплывающем меню.
Выполнено! Вы избавились от пустых столбцов, и теперь нет ничего, что могло бы помешать вам удалить верхнюю строку с формулами.
Самый быстрый способ удалить пустые столбцы в Excel.
В начале этого руководства я написал, что в Excel нет способа расправиться с пустыми столбцами одним щелчком мыши. На самом деле это не совсем так. Я должен был сказать, что нет таких стандартных возможностей в самом Excel. Пользователи надстройки Ultimate Suite могут удалить их почти автоматически, буквально за пару кликов
На вашем листе переключитесь на вкладку AblebitsTools, нажмите Delete Blanks и выберите Пустые столбцы (Empty Columns):
Чтобы убедиться, что это не случайный щелчок мыши, программа попросит вас подтвердить, что вы действительно хотите убрать пустые столбцы с этого рабочего листа:
Нажмите ОК, и через мгновение все незаполненные колонки исчезнут!
Как и описанный выше макрос, этот инструмент удаляет только те столбцы, которые абсолютно пусты. Колонки с одним значением, включая заголовки, сохраняются.
Более подробно об инструменте удаления пустых строк, столбцов и ячеек вы можете прочитать здесь.
Удаление пробелов – это лишь одна из десятков замечательных функций, которые могут облегчить вам жизнь пользователя Excel. Чтобы узнать больше, вы можете загрузить пробную версию невероятно функциональной программы Ultimate Suite for Excel.
Пустые столбцы не удаляются! Почему?
Проблема : вы испробовали все вышеперечисленные методы, но на вашем листе застряли одна или несколько пустых колонок. Почему?
Скорее всего, потому, что они на самом деле не пусты. Различные символы, невидимые глазу, могут незаметно скрываться в ваших таблицах Excel, особенно если вы импортировали информацию из внешнего источника. Это может быть просто пробел, неразрывный пробел или другой непечатаемый символ. Это также может быть формула, которая возвращает пустое значение.
Чтобы определить виновника, выберите первую ячейку в проблемном месте и нажмите Ctrl + стрелка вниз. И вы сразу же переместитесь к первой непустой ячейке. Например, столбец B на скриншоте ниже не является пустым из-за символа пробела в B6:
Дважды щелкните ячейку, чтобы перейти в режим редактирования и увидеть, что на самом деле находится в ней. Или просто нажмите клавишу Delete, чтобы избавиться от чего-то неизвестного и невидимого.
А затем повторите описанный выше процесс, чтобы узнать, есть ли ниже ещё какие-либо другие невидимые объекты. Вы также можете очистить свои данные, удалив начальные, конечные и неразрывные пробелы.
Благодарю вас за чтение и надеюсь увидеть вас в нашем блоге снова!
В данном примере предоставлены и описаны исходные коды VBA-макросов для работы с пустыми столбцами в таблице Excel.
Как выделить все пустые столбцы макросом
У нас иметься таблица годового бюджета с поквартальными показателями сумм статей расходов:
Каждый квартал разделен между собой пустыми столбцами. Нам необходимо удалить все пустые столбцы из таблицы. Нет смысла вручную выделять каждый столбец перед удалением, ведь это займет много времени и сил. К тому же случайно можно выделить не до конца пустой столбец и потерять ценные данные. Лучше написать свой макрос для автоматического выделения всех пустых столбцов в таблице Excel.
Откройте редактор кода макросов Visual Basic (ALT+F11):
В редакторе создайте новый модуль выбрав инструмент: «Insert»-«Module» и введите в него этот VBA-код макроса:
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 строк и тогда они все будут обрабатываться макросом, на что потребуются дополнительные ресурсы системы и время.
Skip to content
Как удалить пустые столбцы
На чтение 3 мин. Просмотров 2.3k.
Что делает макрос: Так же, как с пустыми строками, пустые столбцы имеют потенциал причинения непредвиденных ошибок. Если вы обнаружите, что вы вручную пытаетесь выискивать и удалить пустые столбцы в наборах данных, этот макрос позволяет автоматизировать эту задачу.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
В этом макросе, мы используем свойство 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 объявляет две переменные. Первая переменная является переменной объекта под названием MyRange. Это переменная объекта, который определяет целевой диапазон. Другая переменная является переменной Long Integer называется iCounter.
- Шаг 2 заполняет переменную MyRange со свойством UsedRange объекта ActiveSheet. Свойство UsedRange дает диапазон, который охватывает клетки, которые были использованы для ввода данных. Обратите внимание, что если мы хотим указать фактический диапазон или именованный диапазон, мы могли бы просто ввести свое название — Range («MyNamedRange»).
- На этом этапе макрос устанавливает параметры для нашего инкрементного счетчика, чтобы начать на максимальном количестве для диапазона (MyRange.Columns.Count) и заканчивается в 1 (первая строка выбранного диапазона). Обратите внимание, что мы используем Шаг-1 классификатор. Поскольку мы указываем шаг -1, Excel знает, что мы будем увеличивать счетчик в обратном направлении; перемещение назад один шаг на каждой итерации. В целом, Шаг 3 говорит Excel, что мы хотим, чтобы начать в последнем столбце выбранного диапазона, двигаясь назад, пока мы не получим в первом столбце диапазона. При работе с диапазоном, вы можете явно вызывать определенный столбец в диапазоне, передавая номер столбца индекса к коллекции Columns диапазона. Например, Range («A1: D17»). Columns(2) указывает на второй столбец в диапазоне (столбец B).
- На шаге 4, макрос использует переменную iCounter как номер индекса для коллекции Columns MyRange. Это помогает определить, каким именно столбцом мы работаем в текущем цикле. Макрос проверяет все ячейки в этом столбце, являются ли они пустыми. Если они есть, макрос удаляет весь столбец.
- На шаге 5, макрос возвращается к началу цикла увеличивать счетчик.
Как использовать
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши personal.xlb в окне Project.
- Выберите Insert➜Module.
- Введите или вставьте код.