Excel как удалить столбец макросом

  • 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. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Удаление строки с помощью VBA
  2. Excel Переместить столбцы
  3. Транспонировать диапазон в VBA
  4. Excel Удалить строку ярлык

4377 / 661 / 36

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

Сообщений: 2,134

1

06.04.2010, 21:14. Показов 57735. Ответов 16


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

Столбец проходит через диапазон обьединенных ячеек (например Сolumns(h) через ячейку, обьеденившую ячейки G10, H10, i10) Отменять обьединение не желательно. Что только не пробую — глухо.



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
Selection.Delete ‘удаляет все столбцы, участвующие в объединении



1



4377 / 661 / 36

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

Сообщений: 2,134

11.04.2010, 11:14

 [ТС]

6

Цитата
Сообщение от petr-sev
Посмотреть сообщение

Для удаления столбца нужно применить метод Delete, непосредственно к самому столбцу, не выделяя его перед этим
Для сравнения:

Columns(h).Delete ‘удаляет только указанный столбец

Columns(h).Select
Selection.Delete ‘удаляет все столбцы, участвующие в объединении

Спасибо, работает. Действительно, для контроля я выделял столбец, что в окончательном варианте кода планировалось удалить. Теперь все на месте. Еще раз спасибо.



1



24 / 8 / 17

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

Сообщений: 2,099

01.03.2016, 02:48

7

у меня есть 6 столбцов и 16 строк как в цикле FOR
удалить стоблбцы и строки в диапазоне с(задаеться textbox1.value=3) по
‘к-во всего столбцов в бд
cellx = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell) .Column
‘к-во всего строк в бд
rowx = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell) .row



0



Казанский

15136 / 6410 / 1730

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

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

01.03.2016, 03:03

8

scherbakovss201, а зачем в цикле?

Visual Basic
1
2
range(columns(3),columns(cellx)).delete 'столбцы
range(rows(3),rows(rowx)).delete 'строки



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» подставить значение текстбокса — не судьба?

Visual Basic
1
2
3
n=val(textbox1.value)
range(columns(n),columns(cellx)).delete 'столбцы
range(rows(n),rows(rowx)).delete 'строки



0



inquisitor

24 / 8 / 17

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

Сообщений: 2,099

01.03.2016, 17:19

11

О так можно удалять без цикла.Круто.А можно ли загрузать(открыть/импортировать) бд екселе на vba
скажем не всю,а только к-во строк/стролбцов указанных в textbox1.value?

PureBasic
1
2
3
4
5
Private Sub C()
    Workbooks.OpenDatabase Filename:= _
        "C:UsersuserDownloadslabзадачиlab1Database31.accdb", CommandText:=Array( _
        "копия ""сотрудники"""), CommandType:=xlCmdTable, ImportDataAs:=xlTable
End Sub



0



1 / 1 / 0

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

Сообщений: 3

17.01.2019, 16:45

12

Почему у меня компилятор ругается

Sheets(«ДГМ»).Range(Columns(8), Columns(20)).Delete

Добавлено через 19 минут
ActiveSheet.Range(Cells(1, 7), Cells(LastRowSheetsFasad, LastCol)).Select
итак тоже не работает

Добавлено через 33 минуты
Решил проблему вот таким простым способом
For j = 8 To LastCol
Sheets(«ДГМ»).Columns(8).Delete
Next j



0



pashulka

4131 / 2235 / 940

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

Сообщений: 4,624

17.01.2019, 19:12

13

DANGER1979, Если в момент удаления лист с именем «ДГМ» не активен, то :

Visual Basic
1
Sheets("ДГМ").Range(Sheets("ДГМ").Columns(8), Sheets("ДГМ").Columns(20)).Delete

Добавлено через 3 минуты
Хотя в Вашем случае достаточно и :

Visual Basic
1
Sheets("ДГМ").Range("H:T").Delete
Visual Basic
1
Sheets("ДГМ").Columns("H:T").Delete
Visual Basic
1
Sheets("ДГМ").Columns(8).Resize(, 13).Delete



1



DANGER1979

1 / 1 / 0

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

Сообщений: 3

24.01.2019, 12:38

14

PureBasic
1
2
Sheets("ДГМ").Range(Sheets("ДГМ").Columns(8), Sheets("ДГМ").Columns(LastCol)).Delete 
Sheets("ДГМ").Columns(8).Resize(, LastCol).Delete

оба эти варианта работает плохо,
т.к. подсчёт суммы (=RC[-1]*СУММ(RC[1]:RC[21])*R8C6) в 6 столбце по всем столбцам теряет привязку к 7 столбцу и последнему пустому столбцу

Мой вариант

PureBasic
1
2
3
    For j = 8 To LastCol
        Sheets("ДГМ").Columns(8).Delete
    Next j

т.е. мы удаляем с 8 по последний столбец с данными
работает так как надо



0



pashulka

4131 / 2235 / 940

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

Сообщений: 4,624

24.01.2019, 16:34

15

DANGER1979,

1) Вопрос был «почему у меня компилятор ругается» и не более

2) Два представленных варианта различаются, ибо правильно будет так :

Visual Basic
1
Sheets("ДГМ").Columns(8).Resize(, LastCol - 7).Delete

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



Команда для макроса. Удаление не нужных мне столбцов.

evgenmurga

Дата: Воскресенье, 03.01.2021, 15:33 |
Сообщение № 1

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

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

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


Добрый вечер, прошу помощи профессионалов.
Заинтересовался макросами и пытаюсь создавать элементарные для работы.
Пользуюсь однотипными файлами Excel выгружаемыми из различных программ.
Мне необходима команда, которая будет удалять именно те столбцы, которые я хочу.
Например хочу удалить столбцы D,E,R,T,X.
Заранее спасибо.

 

Ответить

Hugo

Дата: Воскресенье, 03.01.2021, 17:25 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

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


2010, теперь уже с PQ

Включаете запись макроса, удаляете столбцы, НАЧИНАЯ С ПОСЛЕДНЕГО.
Выключаете запись макроса.
Всё.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

probkinfeda

Дата: Понедельник, 15.02.2021, 13:28 |
Сообщение № 3

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

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

Сообщений: 25


Репутация:

5

±

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


Это задача как я понимаю простая 10 минут работы

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

___.xls
(22.0 Kb)

 

Ответить

Kuzmich

Дата: Понедельник, 15.02.2021, 19:50 |
Сообщение № 4

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

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

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


Excel 2003

Цитата

удалить столбцы D,E,R,T,X

[vba]

Код

Sub DelColumns()
     Range(Replace(«D, E, R, T, X», «,», «1,», 1) & «1»).EntireColumn.Delete
End Sub

[/vba]

 

Ответить

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

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

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

Способ 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

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, чтобы избавиться от чего-то неизвестного и невидимого. 

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

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

В данном примере предоставлены и описаны исходные коды 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 строк и тогда они все будут обрабатываться макросом, на что потребуются дополнительные ресурсы системы и время.

Normally in an Excel worksheet, we have two different methods to delete columns: the keyboard shortcut and the right-click and insert method. But, in VBA, we must use the “Delete” command and the entire column statement to delete any column together. If we need to delete a single column, we give a single column reference, but we give multiple column references for multiple columns.

We perform many actions in Excel like cutting, copying, pasting, adding, deleting, and inserting regularly. We can use all of these actions using VBA coding. However, one of the important concepts we need to learn in VBA is the “deleting column.” This article will show you how to use this “Delete Column” option in VBA.

Table of contents
  • Excel VBA Delete Column
    • What Does Delete Column Do in Excel VBA?
    • Examples of Excel VBA Delete Column Method
      • Example #1 – Using Delete Method
      • Example #2 – Delete Columns with Worksheet Name
      • Example #3 – Delete Blank Columns
      • Example #4 – Delete Blank Cells Columns
    • Recommended Articles

What Does Delete Column Do in Excel VBA?

As the name says, it will delete the specified column. To perform this task, we must first identify which column to delete. The selection of deleted columns differs from one scenario to another, so that we will cover some of the important and often faced scenarios in this article.

Deleting the columns is easy. First, we need to use the COLUMNS property to select the column, so VBA’s syntax of the “Delete Column” method is below.

Columns (Column Reference).Delete

So, we can construct the code like this:

Columns (2).Delete or Columns (“B”).Delete

It will delete column number 2, i.e., column B.

If we want to delete multiple columns, we cannot enter columns. Instead, we need to reference the columns by column headers, i.e., alphabets.

Columns (“A:D”).Delete

It will delete the column from A to D, i.e., the first 4 columns.

Like this, we can use the “Delete Column” method in VBA to delete particular columns. In the below section, we will see more examples to understand it better. Read on.

VBA Delete Column

Examples of Excel VBA Delete Column Method

Below are examples of deleting columns using VBA.

Example #1 – Using Delete Method

Assume you have the datasheet, something like the below.

VBA Delete Column Example 1

If we want to delete the month “Mar,” first select the column property.

Code:

Sub Delete_Example1()

  Columns(

End Sub

VBA Delete Column Example 1-1

Mention the column number or alphabet. In this case, it is either 3 or C.

Code:

Sub Delete_Example1()

  Columns(3).

End Sub

VBA Delete Column Example 1-2

Use the Delete method.

Note: You would not get the IntelliSense list to select the Delete method. Just type “Delete.”

Code:

Sub Delete_Example1()

  Columns(3).Delete

End Sub

VBA Delete Column Example 1-3

Or you can enter the column address like this.

Code:

Sub Delete_Example1()

  Columns("C").Delete

End Sub

VBA Delete Column Example 1-4

Run this code using the F5 key, or you can run it manually and see the result.

VBA Delete Column Example 1-5

Both the codes will do the same job of deleting the mentioned column.

VBA Delete Column Example 1-6

If we want to delete multiple columns, we need to mention them in the alphabet. We cannot use column numbers here.

If we want to delete columns 2 to 4, we can pass the code like the below.

Code:

Sub Delete_Example1()

  Columns("C:D").Delete

End Sub

VBA Delete Column Example 1-7

Run this code manually through the run option or press the F5 key. It will delete the columns “Feb,” “Mar,” and “Apr.”

VBA Delete Column Example 1-8

Example #2 – Delete Columns with Worksheet Name

The above is an overview of how to delete columns using VBA code. However, that is not a good practice to delete columns. Deleting the column without referring to the worksheet name is dangerous.

If you have not mentioned the worksheet name, then whichever sheet is active will delete columns of that sheet.

First, we need to select the worksheet by its name.

Code:

Sub Delete_Example2()

    Worksheets("Sales Sheet").Select

End Sub

VBA Delete Column Example 2

After selecting the sheet, we need to select the columns. We can also select the columns by using the VBA RANGE objectRange is a property in VBA that helps specify a particular cell, a range of cells, a row, a column, or a three-dimensional range. In the context of the Excel worksheet, the VBA range object includes a single cell or multiple cells spread across various rows and columns.read more.

Code:

Sub Delete_Example2()

   Worksheets("Sales Sheet").Select
   Range("B:D").Delete

End Sub

VBA Delete Column Example 2-1

It will delete columns B to D of the worksheet “Sales Sheet.” For this code, it does not matter which is active. Still, it will delete the mentioned columns of that sheet only.

We can construct the VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more in the single line itself.

Code:

Sub Delete_Example2()

    Worksheets("Sales Sheet").Range("B:D").Delete

End Sub

VBA Delete Column Example 2-2

It also deletes the columns “B to D” without selecting the worksheet “Sales Sheet.”

Example #3 – Delete Blank Columns

Assume you have data that has alternative blank columns like the below.

VBA DC Example 3

So, delete every alternate column. Then, we can use the below code.

Code:

Sub Delete_Example3()

    Dim k As Integer

    For k = 1 To 4
    Columns(k + 1).Delete
    Next k

End Sub

VBA DC Example 3-1

Run this code using the F5 key or manually. Then, it will delete all the alternative blank columns, and our data will look like this.

VBA Delete Column Example 3-2

Note: This works only for alternative blank columns.

Example #4 – Delete Blank Cells Columns

Now, look at this example. In certain situations, we need to delete the entire column if we find any blank cells in the data range. Consider the below data for an example.

VBA DC Example 4

All the yellow-colored cells are blank. So here, we require to delete all the blank cell columns. The below code will do that.

Code:

Sub Delete_Example4()

    Range("A1:F9").Select

    Selection.SpecialCells(xlCellTypeBlanks).Select

    Selection.EntireColumn.Delete

End Sub

VBA DC Example 4-1

Let me explain this code line by line for you.

Our data is from A1 to F9, so first, we must select that range. The below code will do that.

Range("A1:F9").Select

We need to select the blank cells in this selected range of cells. So, to select a blank cell, we need a special cell property. In that property, we have used cell type as blank.

Selection.SpecialCells(xlCellTypeBlanks).Select

Next, it will select all the blank cells, and we are deleting the entire selection column in the selection.

Selection.EntireColumn.Delete

So, our result will look like this.

VBA DC Example 4-2

Wherever it has found the blank cell, it has deleted those blank cells entirely.

You can download this Excel VBA Delete Column here – VBA Delete Column Template

Recommended Articles

This article has been a guide to VBA Delete Column. Here, we learn four methods to delete columns using Excel VBA code, practical examples, and downloadable codes. Below are some useful Excel articles related to VBA: –

  • How to Delete File in VBA?
  • VBA Integer Function
  • IsEmpty Function in VBA
  • IFERROR in VBA

Работа с умной таблицей из кода VBA Excel. Обращение к ячейкам, строкам и столбцам умной таблицы. Добавление и удаление строк и столбцов.

Обращение к умной таблице

Все примеры кода в этой статье привязаны к таблице с именем «Таблица1», расположенной на активном листе:

Обращение к умной таблице:

ActiveSheet.ListObjects(«Таблица1»)

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

ActiveSheet.ListObjects(«Таблица1»).Range

Проверяем:

Debug.Print ActiveSheet.ListObjects(«Таблица1»).Range.Address  ‘Результат: $B$3:$G$9

Далее все примеры кода VBA Excel, чтобы их не дублировать, будут представлены как аргументы метода Debug.Print.

Обращение к строкам

Работа с умной таблицей — обращение к строке заголовков:

Debug.Print ActiveSheet.ListObjects(«Таблица1»).Range.Rows(1).Address  ‘Результат: $B$3:$G$3

Таким же образом можно обращаться и к остальным строкам таблицы (Строка1-Строка6), указывая индекс нужной строки от 2 до 7.

К записям таблицы (Строка1-Строка6) обращаются через коллекцию ListRows, указывая индекс записи от 1 до 6:

With ActiveSheet.ListObjects(«Таблица1»)

    Debug.Print .ListRows.Count  ‘Результат: 6

    Debug.Print .ListRows(1).Range.Address  ‘Результат: $B$4:$G$4

    Debug.Print .ListRows(2).Range.Address  ‘Результат: $B$5:$G$5

End With

Обращение к столбцам

Обращение к третьему столбцу умной таблицы из кода VBA Excel:

With ActiveSheet.ListObjects(«Таблица1»)

    ‘Обращение через диапазон умной таблицы

    Debug.Print .Range.Columns(3).Address  ‘Результат: $D$3:$D$9

    Debug.Print .Range.Columns.Count  ‘Результат: 6

    ‘Обращение через коллекцию ListColumns

    Debug.Print .ListColumns(3).Range.Address  ‘Результат: $D$3:$D$9

    Debug.Print .ListColumns.Count  ‘Результат: 6

End With

Обращение к ячейкам

Работа с умной таблицей — обращение к ячейке «E7» с отображением ее значения:

With ActiveSheet.ListObjects(«Таблица1»)

    Debug.Print .Range.Cells(5, 4)  ‘Результат: 91

    Debug.Print .ListColumns(4).Range(5)  ‘Результат: 91

    Debug.Print .ListRows(4).Range(4)  ‘Результат: 91

End With

Вставка и удаление строк

Вставка новой строки в конец умной таблицы:

ActiveSheet.ListObjects(«Таблица1»).ListRows.Add

Удаление последней строки:

With ActiveSheet.ListObjects(«Таблица1»)

    .ListRows(.ListRows.Count).Delete

End With

Вставка новой строки на место пятой записи (Строка5 в таблице) со сдвигом пятой и нижерасположенных записей вниз:

ActiveSheet.ListObjects(«Таблица1»).ListRows.Add 5

Удаление пятой строки:

ActiveSheet.ListObjects(«Таблица1»).ListRows(5).Delete

Вставка и удаление столбцов

Вставка нового столбца в конец умной таблицы из кода VBA Excel:

ActiveSheet.ListObjects(«Таблица1»).ListColumns.Add

Удаление последнего столбца:

With ActiveSheet.ListObjects(«Таблица1»)

    .ListColumns(.ListColumns.Count).Delete

End With

Вставка нового столбца на место четвертой графы таблицы со сдвигом четвертой и последующих граф вправо:

ActiveSheet.ListObjects(«Таблица1»).ListColumns.Add 4

Удаление четвертого столбца таблицы:

ActiveSheet.ListObjects(«Таблица1»).ListColumns(4).Delete


Создание и удаление умной таблицы описано в статье VBA Excel. Создание таблицы (умной, обычной)


In this Article

  • Delete Entire Row or Column
    • Delete Multiple Rows or Columns
  • Delete Blank / Empty Rows
    • Delete Row if Cell is Blank
  • Delete Row Based on Cell Value
  • More Delete Row and Column Examples
    • Delete Duplicate Rows
    • Delete Table Rows
    • Delete Filtered Rows
    • Delete Rows in Range
    • Delete Selected Rows
    • Delete Last Row
    • Delete Columns by Number

This tutorial will demonstrate different ways to delete rows and columns in Excel using VBA.

Delete Entire Row or Column

To delete an entire row in VBA use this line of code:

Rows(1).Delete

Notice we use the Delete method to delete a row.

Instead of referencing the Rows Object, you can reference rows based on their Range Object with EntireRow:

Range("a1").EntireRow.Delete

Similarly to delete an entire column, use these lines of code:

Columns(1).Delete
Range("a1").EntireColumn.Delete

Delete Multiple Rows or Columns

Using the same logic, you can also delete multiple rows at once:

Rows("1:3").Delete

or columns:

Columns("A:C").Delete

Notice here we reference the specific row and column numbers / letters surrounded by quotations.

Of course, you can also reference the EntireRow of a range:

Range("a1:a10").EntireRow.Delete

Note: The examples below only demonstrate deleting rows, however as you can see above, the syntax is virtually identically to delete columns.

Delete Blank / Empty Rows

This example will delete a row if the entire row is blank:

Sub DeleteRows_EntireRowBlank()

Dim cell As Range

For Each cell In Range("b2:b20")
    If Application.WorksheetFunction.CountA(cell.EntireRow) = 0 Then
        cell.EntireRow.Delete
    End If
Next cell

End Sub

It makes use of the Excel worksheet function: COUNTA.

Delete Row if Cell is Blank

This will delete a row if specific column in that row is blank (in this case column B):

Range("b3:b20").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Delete Row Based on Cell Value

This will loop through a range, and delete rows if a certain cell value in that row says “delete”.

Sub DeleteRowswithSpecificValue()

Dim cell As Range

For Each cell In Range("b2:b20")
    If cell.Value = "delete" Then
        cell.EntireRow.Delete
    End If
Next cell

End Sub

More Delete Row and Column Examples

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Delete Duplicate Rows

This code will delete all duplicate rows in a range:

Range("b2:c100").RemoveDuplicates Columns:=2

Notice we set Columns:=2. This tells VBA to check both the first two columns of data when considering if rows are duplicates. A duplicate is only found when both columns have duplicate values.

If we had set this to 1, only the first row would’ve been checked for duplicate values.

Delete Table Rows

This code will delete the second row in a Table by referencing ListObjects.

ThisWorkbook.Sheets("Sheet1").ListObjects("list1").ListRows(2).Delete

Delete Filtered Rows

To delete only rows that are visible after filtering:

Range("b3:b20").SpecialCells(xlCellTypeVisible).EntireRow.Delete

VBA Programming | Code Generator does work for you!

Delete Rows in Range

This code will delete all rows in range:

Range("a1:a10").EntireRow.Delete

Delete Selected Rows

This code will delete all selected rows:

Selection.EntireRow.Delete

Delete Last Row

This will delete the last used row in column B:

Cells(Rows.Count, 2).End(xlUp).EntireRow.Delete

By changing 2 to 1, you can delete the last used row in column A, etc.:

Cells(Rows.Count, 1).End(xlUp).EntireRow.Delete

Delete Columns by Number

To delete a column by it’s number, use a code like this:

Columns (2).Delete

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Excel как удалить стиль таблицы
  • Excel как удалить ссылки на другие файлы
  • Excel как удалить символы после пробела
  • Excel как удалить символы в конце строки
  • Excel как удалить символ слева

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии