Работа с умной таблицей из кода 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. Создание таблицы (умной, обычной)
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#1 29.05.2018 14:23:32 Доброго времени суток, Планетяне! Вставка строк рассмотрена тут Писал большой макрос и возникла необходимость удалять из умной таблицы данные по критерию в одном столбце. Алгоритм нехитрый: фильтруем умную по нужному значению в нужном столбце, удаляем видимые, снимаем фильтр. Единственный вариант без Select‘ов и Activate‘ов, который я нашёл это ровно такая же строка, но без .EntireRow. Однако, дорожка это кривая: в определённых ситуациях (диапазон из одной области по столбцу(-цам)) таким способом можно удалить не только строки целиком, но и столбцы. Поделитесь опытом — как быть?
Прикрепленные файлы
Изменено: Jack Famous — 06.03.2019 15:26:51 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#2 29.05.2018 15:19:09
может с руками что-то не то?
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#3 29.05.2018 15:30:37
может, но вы бы тогда и на свои обратили внимание, потому что не работает… Злой вы какой-то стали Прикрепленные файлы
Изменено: Jack Famous — 29.05.2018 15:35:43 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#4 29.05.2018 17:29:20 как выяснилось, из таблицы строк не выкинешь….
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#5 29.05.2018 18:00:38
вот и я о том же)) мало того, что Select’ы приходится использовать (а я стараюсь вообще без них обходиться), так ещё «разбивать», а потом обратно «собирать» «умную» Если никто больше не подскажет, то думаю вот что: 1. до 5-10к строк — циклы (можно снизу вверх по строкам, но лучше собирать всё в Union, а потом скопом удалить)
Как-то так Изменено: Jack Famous — 29.05.2018 18:04:32 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#6 29.05.2018 18:04:15 Привет, Алексей
по позже вечером напишу, есть два стравнительно простых подхода без этого танца с бубном. |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Доброго вечера, Андрей! Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Ігор Гончаренко Пользователь Сообщений: 13746 |
#8 29.05.2018 18:26:19
— удаляет по одной Изменено: Ігор Гончаренко — 29.05.2018 18:26:36 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Казанский Пользователь Сообщений: 8839 |
#9 29.05.2018 18:50:16 Смежный диапазон строк — можно
С несмежным не получается. |
||
RAN Пользователь Сообщений: 7091 |
#10 29.05.2018 20:18:32
|
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#11 29.05.2018 20:30:44 Вариант, с удалением строк.
Второй вариант, это то, что предложил Игорь, только он требует сброса фильтрации, иначе на 2010. ListRows®.Delete спокойно выполняется, только ничего не удаляется, поэтому применяется сброс фильтра. Естественно, будет самым медленным, у меня выполняется 7 секунд. Правда, есть выгода, не удаляются данные вне таблицы, совпадающие с номерами видимых строк.
Изменено: Андрей VG — 29.05.2018 20:31:12 |
||
sokol92 Пользователь Сообщений: 4445 |
Здравствуйте, коллеги! Поддерживаю Андрея в такой редакции (модификация известного метода ZVI): добавить в таблицу столбец с формулой (0-не удалять, 1-удалять), отсортировать по этому столбцу, удалить строки. Временный индекс для восстановления порядка, мне кажется, не нужен, как как сортировка Excel всегда после ключей сохраняет первоначальный порядок строк. |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Господа, спасибо вам огромное! Изменено: Jack Famous — 29.05.2018 21:37:49 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
sokol92 Пользователь Сообщений: 4445 |
#14 30.05.2018 17:23:43
Редакция, описанная выше:
Изменено: sokol92 — 30.05.2018 18:52:01 Владимир |
|||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
sokol92, благодарю вас! Всё ещё занимаюсь большим проектом (пока ограничился циклом в силу небольшого объёма). Как только сдам (надеюсь завтра) — устрою тест-драйв. Радует что принцип работы и логика всех предложенных вариантов ясны Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#16 01.06.2018 13:32:30 Всем доброго времени суток! Я закончил тесты. На 5к строк все методы, связанные с работой в отфильтрованном диапазоне в 10-20 раз медленнее метода с созданием дополнительного столбца с формулой фильтра и последующей сортировкой (от 4 секунд с вариантами от Андрея и до 10-20 секунд с вариантами от Игоря и RAN против 0,28-0,33 сек варианта с сортировкой). И это при том, что столбец надо создать и удалить. а это небыстро для умных таблиц. Метод предложил Андрей и sokol92, и, как я понимаю это демонстрировал легендарный ZVI. Что ж…прекрасный приём обхода фильтрации, надо сказать — взял на вооружение! И, кстати, не сразу допёр, но ведь действительно
потому что, когда мы сортируем по временному столбцу, это просто позволяет быстро удалять строки, а порядок оставшихся никак не меняется (при условии, что все строки, попадающие под критерии удаляются, разумеется). Это круто! В завершении хочу сказать огромное спасибо всем откликнувшимся! Разумеется, это не соревнование и все предложенные здесь методы являются новыми для меня и знать их просто необходимо (тем более с моей любовью к «умным» таблицам). Спасибо вам большое за науку! В процессе штудирования матчасти активно юзал эту статью о работе с «умными» таблицами (англ.)
Прикрепленные файлы
Изменено: Jack Famous — 01.06.2018 13:34:05 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#17 06.03.2019 10:11:12 Доброго времени суток, Планетяне! Выкладываю функцию, позволяющую удалить строки независимо, простой ли это диапазон или умная таблица. Без циклов
Выдаст ошибку, если в умной таблице удалены все строки (одна видна, но тип «дежурная»). Чтобы удалить все строки умной таблицы, нужно выделить диапазон любого столбца (без шапки/заголовка) и нажать кнопку «удалить строки с листа» Если удалять ВСЕ строки «умной» таблицы, то макросное удаление через Range.EntireRow.Delete сработает. Вдохновляли: тут и тут ) The VBA Guide To ListObject Excel TablesP.S.: если у вас области умной таблицы разделены на область ввода и область формул, то есть столбцы для ввода и формульные не перемешаны и можно выделить одной областью весь диапазон для ручного ввода (см. столбцы «B-L» на скрине), то есть способ, который на больших объёмах даст существенный выигрыш: Прикрепленные файлы
Изменено: Jack Famous — 06.03.2019 15:29:16 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Тем, кто не знает, как в Экселе добавить строку или столбец, а потом их удалить, стоит познакомиться с нашей инструкцией. Тем более, что сделать это можно с помощью разных методик — начиная от использования «горячих клавиш» и заканчивая «умными таблицами».
Вставка строк и столбцов между уже существующих
Самый простой способ, как в Экселе добавить строки в таблице, будет одинаковым для всех версий офисного пакета, от 1997 до 2019. Алгоритм добавления выглядит следующим образом:
- Открыть нужный лист и таблицу, в которую будут добавляться элементы.
- Выбрать любую ячейку в той строке, над которой будет добавляться новый ряд.
- Кликнуть по этой ячейке правой кнопкой мыши, а в открывшемся меню выбрать вставку. Или заменить это действие нажатием комбинации Ctrl + «+».
- Указать, что добавить нужно именно строку, а не другие элементы, и нажать ОК.
Результатом станет добавление новой строки над выбранным рядом. Она будет, во-первых, пустой и, во-вторых, форматированной точно так же, как ячейка, с помощью которой выполнялась вставка. Сохранятся размеры и границы, выравнивание, цвет текста и заполнения.
Еще один способ, как вставить строку в таблицу Эксель, предполагает выделение номера нужной строки, открытие контекстного меню правой кнопкой мыши и выбор вставки. С помощью этой же методики можно добавлять сразу несколько рядов. Для этого придется перед вставкой выделить 2, 3 или большее количество строк. Число добавленных рядов и их форматирование будет совпадать с выделенной областью. Новые строки появляются над верхней выделенной.
Все эти способы могут применяться и для добавления колонок. В первом случае придется выбрать не «строку», а «столбец». Во втором — выделять литеры, которыми обозначены колонки. Новые столбцы добавляются левее выделенных с полным сохранением форматирования.
Добавление элементов в конце таблицы
Разбираясь, как добавить строку в готовую таблицу Эксель, стоит рассмотреть еще один способ — вставка нового элемента в самом конце нужной области. Если попробовать сделать это одним из предыдущих способов, новый ряд окажется расположенным отдельно. Его форматирование не будет соответствовать таблице, а при наличии границ строка будет отличаться от основной таблицы даже визуально. Для добавления ряда следует выполнить другие действия:
- Выделить последнюю строку таблицы. Но только не всю, а по ширине готовой таблицы.
- Навести курсор на самую нижнюю ячейку справа, подождав, пока он не примет форму крестика.
- Нажав и не отпуская левую клавишу мыши, «растянуть» таблицу вниз на нужное количество рядов.
- Отпустить кнопку.
Результатом этих действий станет добавление в конце таблицы нужного количества строк, форматирование которых будет полностью совпадать с последним рядом. Однако ячейки окажутся заполнены данными — так же, как при копировании формул сразу в нескольких столбцах. Чтобы от этого избавиться, информацию можно удалить, выделив всю добавленную область (хотя она и так оказывается выделенной по умолчанию после вставки) и нажать «Delete».
Точно такими же способами можно увеличивать и количество столбцов. Единственное отличие — сложности с выделением колонки, которая может состоять из десятков, сотен и даже нескольких тысяч значений. Поэтому столбец стоит выделять кликом мыши по обозначающей его литере. А перетягивать — с помощью крестика, расположенного в верхнем правом углу выделенной области. Таблица «растягивается» направо, а область точно так же очищается от данных.
Удаление столбцов и строк
Разобравшись с добавлением колонок и рядов, стоит познакомиться и со способами, как удалить строку в Эксель или избавиться от ненужного столбца. В зависимости от того, как расположены по отношению друг к другу требующие удаления элементы, методика может быть простой или сложной.
Проще всего пользоваться таким алгоритмом:
- Выделить строки или столбцы, которые будут удаляться. Сделать это быстрее всего можно, кликая по номерам рядов или по литерам, которыми обозначены колонки. Если элементов много, выделяя их, следует держать зажатой клавишу Ctrl.
- Выбрать один из способов удаления строки или столбца. Это может быть команда «Удалить» в контекстном меню и выбор типа удаляемого элемента. Или нажатие комбинации Ctrl + «-». И даже иконка на панели инструментов в группе «Ячейки».
Если удалению подлежат только пустые, то есть не содержащие ни текста, ни чисел, ни любых других данных ряды или колонки, можно воспользоваться другой методикой. Для этого придется сначала выделить всю таблицу и на главной вкладке выбрать пункт «Найти и выделить». Затем указать, что нужно выделить группу ячеек.
После выбора нужного варианта («пустые ячейки») в таблице окажутся выделенными все пустые строки и столбцы. Их можно будет удалить одним нажатием комбинации Ctrl + «-», указав, что удаляются не ячейки, а колонки или ряды.
Правда, перед тем, как удалить столбец или строку в Эксель, придется удостовериться, что в таблице нет отдельных пустых ячеек. Иначе удаление затронет и те колонки или ряды, которые заполнены только частично.
Работа с «умными таблицами»
У пользователей MS Excel есть возможность упростить работу с данными с помощью «умных таблиц». Они легко увеличиваются, позволяя добавлять новые строки без лишних действий. Хотя перед началом работы с такими таблицами, их придется создать:
- На главной вкладке выбрать элемент «Форматировать как таблицу».
- В открывшемся списке выбрать подходящий стиль оформления.
- Убедиться в том, что программа автоматически распознала место расположения таблицы. При необходимости изменить адреса расположения данных.
- Нажать «ОК», получив табличку в выбранном стиле.
Теперь можно заняться форматированием данных. Чтобы вставить столбец в Экселе или строку «умной таблицы» понадобится намного меньше времени. Если элемент добавляется посередине, следует выбрать нужную ячейку, открыть контекстное меню и указать подходящий вариант. Вставлять можно колонки слева или ряды выше выделенной области.
Вставка может быть автоматической — с помощью комбинации Ctrl + «+». Если добавляется строка, выделяется только одна ячейка. Для добавления столбца придется выделить не меньше двух, расположенных в одной колонке друг под другом.
Точно такие же способы, «горячие» клавиши или контекстное меню применяют и для удаления колонок и рядов. Но главная особенность «умной» таблицы — автоматическое добавление строки в самом конце и крайнего правого столбца. Для этого нужно заполнить одну ячейку — нужные элементы добавятся автоматически, увеличив таблицу на одну колонку или ряд.
Подведение итогов
Разобравшись, как добавить и убрать столбцы в Эксель или как сделать то же самое со строками таблицы, можно ускорить работу с программой. Для небольших объемов данных стоит выбирать самые простые методики. При необходимости в частом редактировании можно рассматривать возможность использования функций «умной таблицы».
Читайте также:
- Матрица монитора: какая лучше? Узнайте до того, как будете покупать
- Настраиваем VPN сразу на роутере: как это сделать?
ILF_ollie 2 / 2 / 0 Регистрация: 19.08.2010 Сообщений: 70 |
||||
1 |
||||
Удаление строк из умной таблицы по условию10.06.2016, 12:33. Показов 12988. Ответов 6 Метки нет (Все метки)
Добрый день, уважаемые форумчане.
С уважением,
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
10.06.2016, 13:41 |
2 |
|||
2 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
10.06.2016, 13:53 |
3 |
|||
Можно ещё и так :
0 |
1 / 1 / 0 Регистрация: 23.06.2015 Сообщений: 2 |
|
09.02.2018, 16:21 |
4 |
Ваш, вариант почему-то удалил столбец с условиями. А KoGG 100% рабочую поправочку дал.
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
09.02.2018, 20:03 |
5 |
kislotik, Если решили начать с притензий, то опубликуйте(выложите) свою таблицу(или часть), где кроме удаления строк «умной» таблицы будут удалены и данные, которые не относятся к этой таблице. И, разумеется, не забудьте указать Вашу версию Excel.
0 |
kislotik 1 / 1 / 0 Регистрация: 23.06.2015 Сообщений: 2 |
||||
09.02.2018, 21:25 |
6 |
|||
Прошу прощения уважаемый pashulka, никаких претензий, код не сработал исключительно в моем случае. Так, как я решил свою проблему кодом выше, истязаться экспериментами к сожалению нет ни времени ни желания. Код ниже, который у меня заработал. моем случае работает гораздо быстрее.
Извините если неправильно был понят.
1 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
09.02.2018, 21:36 |
7 |
Не должен мой код удалять ничего, кроме строк умной таблицы, без относительно личности P.S. Возможно причины неудач кроятся в коде событий, но это гадание …
0 |
Цикл на удаление строк в умной таблице с условием |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |