Работа с умной таблицей из кода 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. Создание таблицы (умной, обычной)
Главная цель: получить в умную таблицу одинакового количества строк с первичной таблицей (на том же листе слева) Вариант 1: Пытаюсь присвоить таблице новый диапазон, взяв значение из ячейки |
|
SuperCat Пользователь Сообщений: 2737 |
#2 17.11.2016 15:12:14
There is no knowledge that is not power |
||
Спасибо большое за Ваш ответ! |
|
SuperCat Пользователь Сообщений: 2737 |
#4 17.11.2016 15:25:44 Параметр в Range — строка, поэтому можно указывать значение из любого источника (с листа, из переменной). Например:
There is no knowledge that is not power |
||
Дмитрий Марков Пользователь Сообщений: 140 |
#5 17.11.2016 15:35:32 Я сослался на ячейку со значением адреса диапазона, получил сообщение:
Прикрепленные файлы
Изменено: Дмитрий Марков — 17.11.2016 15:50:58 |
||
SuperCat Пользователь Сообщений: 2737 |
Неплохо было бы код приложить There is no knowledge that is not power |
SuperCat Пользователь Сообщений: 2737 |
ActiveSheet.ListObjects(1).Select There is no knowledge that is not power |
Да, действительно, это незачем. |
|
SuperCat Пользователь Сообщений: 2737 |
На здоровье There is no knowledge that is not power |
Елена Дроздова Пользователь Сообщений: 106 |
#10 02.06.2022 10:14:02 Добрый день!
До этого пробовала другой код (контекст ниже), но там, как я понимаю, проблема в том, что он добавляет только одну строку, а количество значений для вставки выходит за ее пределы.
Помогите, пожалуйста Изменено: Елена Дроздова — 02.06.2022 10:17:23 |
||||
Елена Дроздова Пользователь Сообщений: 106 |
#11 02.06.2022 10:35:11 Вот такой вариант тоже не проходит, та же ошибка(
|
||
МатросНаЗебре Пользователь Сообщений: 5507 |
#12 02.06.2022 10:48:18
|
||
Благодарю. |
|
МатросНаЗебре Пользователь Сообщений: 5507 |
#14 02.06.2022 11:20:15
Изменено: МатросНаЗебре — 02.06.2022 11:37:33 |
||
МатросНаЗебре, а можно немного пояснить? |
|
МатросНаЗебре Пользователь Сообщений: 5507 |
#16 02.06.2022 11:40:17
Умную таблицу (Workbooks(«НакопительБиблиотека»).Worksheets(«Лист1»).ListObjects(«Копилка»)) PS
|
||||
Код из сообщения 14 работает уже 20 минут… Мне страшно) |
|
Там почти нет длительных процедур. |
|
RAN Пользователь Сообщений: 7091 |
#19 02.06.2022 12:02:53
|
||
Елена Дроздова Пользователь Сообщений: 106 |
#20 02.06.2022 12:52:25
Открывается быстро, видно, как начинает добавлять строки, потом ничего не видно, серое окно с вращающимся колесиком висит уже больше часа |
||
МатросНаЗебре Пользователь Сообщений: 5507 |
#21 02.06.2022 12:55:50
Не должно быть такого. |
||
Уверена, проверила. Сейчас попробую из 19 |
|
Елена Дроздова Пользователь Сообщений: 106 |
#23 02.06.2022 13:02:18
Не так выразилась: он добавил строки, потом некоторое время ничего не происходило видимого, а потом серое окно и все |
||
Код из 19 сообщения сработал на ура! Большое спасибо. Но почему-то заполнены оказались строки с 16776, а со 2 по 16775 строки пусты. Изменено: Елена Дроздова — 02.06.2022 13:08:38 |
|
Елена Дроздова Пользователь Сообщений: 106 |
#25 02.06.2022 13:22:20 Видимо, не зачистила после прошлой попытки. Все работает, огромное спасибо за помощь! |
Добавление удаление строк в умную таблицу по условию |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Содержание
- VBA Excel. Создание таблицы (умной, обычной)
- Создание и удаление умной таблицы
- Создание умной таблицы
- Стиль умной таблицы
- Макрос для добавления строк с заданной высотой в таблицу Excel
- Макрос для вставки строк с определенной высотой
- Умная вставка строк с помощью макроса
- Метод ListRows.Add (Excel)
- Синтаксис
- Параметры
- Возвращаемое значение
- Замечания
- Пример
- Поддержка и обратная связь
- VBA Add row to Table in Excel
- Syntax to Add Row to Table using VBA in Excel
- Example to Add New Row to Table on the Worksheet
- Add Multiple Rows to Table in Excel using VBA
- Add Row & Data to Table on the Worksheet in Excel
- Instructions to Run VBA Macro Code or Procedure:
- Other Useful Resources:
- Vba excel умная таблица добавить строку
VBA Excel. Создание таблицы (умной, обычной)
Создание таблицы с помощью кода VBA Excel. Создание умной и обычной пользовательской таблицы. Указание стиля умной таблицы, добавление строки итогов. Примеры.
Создание и удаление умной таблицы
Создание умной таблицы
Создается умная таблица Excel с помощью следующего кода:
В данном примере:
ActiveSheet — лист, на котором создается таблица, может быть любой лист рабочей книги Excel.
Range(«$A$1:$L$15») — диапазон, который преобразуется в таблицу. Можно использовать и такую форму: Range(Cells(1, 1), Cells(15, 12)), где индексы строк и столбцов можно заменить переменными.
xlNo — указывает, что первая строка выбранного диапазона не содержит заголовки столбцов (граф) будущей таблицы, и их необходимо добавить. В этом случае будет добавлена дополнительная строка с наименованиями столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д., которые в дальнейшем можно переименовать (количество строк в таблице, включая строку заголовков, получится на одну больше, чем в указанном диапазоне). Если в диапазоне уже содержатся заголовки столбцов будущей таблицы, то следует указать вместо xlNo значение xlYes. В этом случае первая строка указанного диапазона будет преобразована в строку заголовков, а если она будет не заполнена, то добавятся названия столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д. (количество строк в таблице, включая строку заголовков, будет то же, что и в указанном диапазоне).
МояТаблица1 — имя, присваиваемое создаваемой таблице. Имя должно быть без пробелов: при указании в коде VBA названия таблицы с пробелами, во время его выполнения Excel заменит пробелы знаками подчеркивания (по крайней мере, так происходит в Excel 2016).
Таблица будет создана со стилем по умолчанию (TableStyleMedium2 в Excel 2016).
Стиль умной таблицы
Присвоение стиля таблице (изменение стиля) осуществляется с помощью свойства TableStyle объекта ListObjects:
Источник
Макрос для добавления строк с заданной высотой в таблицу Excel
В данном практическом примере приведен код макроса для умной вставки пустых строк между ячейками. Пошаговая инструкция как вставлять строки между объединенными и необъединенными ячейками одновременно для любой таблицы.
Макрос для вставки строк с определенной высотой
В таблице отчета по продажам в розничных точках содержаться объединенные ячейки, как показано ниже на рисунке:
Необходимо экспонировать группы ячеек для каждого штата. Для этого мы добавим по одной пустой строке между каждой группой розничных точек. При этом не имеет значение будет ли содержать группа объединенные ячейки или нет. Ведь некоторые группы состоят из одной строки. А также дополнительно уменьшим высоту этих пустых строк, чтобы внешний вид таблицы был стильным. Выполнить вручную все эти действия: выделение отдельных групп ячеек, вставка между ними пустых строк, а потом изменение высоты для этих же строк – это не рационально использование сил и времени. Особенно если таблица имеет десятки тысяч строк. Лучше написать свой макрос, который сам автоматически и молниеносно выполнит эту рутинную работу за Вас.
Перейдите в режим редактора макросов Visual Basic (ALT+F11):
Создайте в нем новый модуль с помощью инструмента: «Insert»-«Module». А потом запишите в него VBA-код самого макроса:
Sub VstavkaStrok()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
pustroka = Selection(i, 1).Row + 1
ActiveSheet.Rows(pustroka).Insert xlShiftDown
ActiveSheet.Rows(pustroka).RowHeight = 7
ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Interior. _
ColorIndex = xlColorIndexNone
i = i — Selection(i, 1).MergeArea.Rows.Count + 1
Next
End Sub
Теперь если мы хотим вставить по одной пустой строке между каждой объединенной и необъединенной ячейкой, которые находиться в столбце A? Тогда а в таблице отчета по продажам выделяем диапазон ячеек A:D18 и запускаем наш макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«VstavkaStrok»-«Выполнить». После запуска макроса таблица будет выглядеть как показано на рисунке:
Сначала в коде объявлены две переменные:
- i – переменная выполняет роль счетчика в цикле.
- pustroka – переменная будет хранить в себе очередной номер для каждой строки выделенного диапазона.
В макросе находиться цикл, который запускает целый ряд инструкций для каждой строки в выделенном диапазоне ячеек. Направление цикла идет с нижней строки выделения к верхней.
- В первой инструкции мы присваиваем для переменной pustroka номер строки которая находиться под текущей строкой.
- Следующая инструкция добавляет пустую строку с высотой в 7 пикселей.
- Удаляются в добавленной строке все вертикальные границы, а также заливка.
- Уменьшается значение переменной i на количество строк, которые охватывает текущая объединенная ячейка, находящаяся в первом столбце выделенного диапазона.
Умная вставка строк с помощью макроса
Если же мы хотим экспонировать только самые большие группы. Допустим Вы желаете сделать так, чтобы макросом были вставлены пустые строки только после объединенных ячеек в столбце A, которые охватывают много строк. И не вставлять пустые строки после необъединенных ячеек или тех объединенных ячеек, которые охватывают не более 1-ой строки. Тогда после строки в коде макроса где описано начало цикла добавляем строку кода с условной инструкцией:
If Selection(i, 1).MergeArea.Rows.Count <> 1 Then
Также перед инструкцией конца цикла Next следует вставить инструкцию конца условия – End If.
Обратите внимание! Параметр условия для игнорирования объединенных ячеек с определенным количеством озвучиваемых строк можно будет даже настраивать, изменяя число после оператора сравнения.
Такая модификация кода макроса внутри цикла будет следить за тем применять ли ряд инструкций к текущей строке или игнорировать их на данном этапе прохода по срокам. Если же текущая строка не содержит необъединенной ячейки или объединенная ячейка охватывает более чем 1-ну строку, тогда для нее применяться все инструкции форматирования. Полная версия модифицированного года выглядит так:
Sub VstavkaStrok1()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
If Selection(i, 1).MergeArea.Rows.Count <> 1 Then
pustroka = Selection(i, 1).Row + 1
ActiveSheet.Rows(pustroka).Insert xlShiftDown
ActiveSheet.Rows(pustroka).RowHeight = 7
ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Interior. _
ColorIndex = xlColorIndexNone
i = i — Selection(i, 1).MergeArea.Rows.Count + 1
End If
Next
End Sub
Результат автоматического форматирования таблицы отчета с учетом новых условий в коде макроса:
Как видите с помощью макросов таблицы любых объемов данных можно форматировать в один клик мышкой.
Источник
Метод ListRows.Add (Excel)
Добавляет новую строку в таблицу, представленную указанным ListObject.
Синтаксис
expression. Add (Position, AlwaysInsert)
Выражение Переменная, представляющая объект ListRows .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Position | Необязательный | Variant | Целое число. Определяет относительную позицию новой строки. |
AlwaysInsert | Необязательный | Variant | Логическое значение. Указывает, следует ли всегда перемещать данные в ячейках под последней строкой таблицы при вставке новой строки независимо от того, пуста ли строка под таблицей. Если значение true, ячейки под таблицей будут смещены вниз на одну строку. |
Если значение Равно False, если строка под таблицей пуста, таблица будет развернута, чтобы занять строку без смещения ячеек под ней, но если строка под таблицей содержит данные, эти ячейки будут смещены вниз при вставке новой строки.
Возвращаемое значение
Объект ListRow , представляющий новую строку.
Замечания
Если позиция не указана, добавляется новая нижняя строка. Если параметр AlwaysInsert не указан, ячейки под таблицей будут смещены вниз на одну строку (аналогично указанию True).
Пример
В следующем примере добавляется новая строка в объект ListObject по умолчанию на первом листе книги. Так как позиция не указана, новая строка добавляется в нижнюю часть списка.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Add row to Table in Excel
VBA Add row to Table in Excel. We can add a single row or multiple rows and data to table. Default new rows added at the end of the table. In this tutorial we have explained multiple examples with explanation. We also shown example output screenshots. We have specified three examples in the following tutorial. You can change table and sheet name as per your requirement. We also specified step by step instructions how to run VBA macro code at the end of the session.
Syntax to Add Row to Table using VBA in Excel
Here is the syntax to add new row to table on the worksheet using VBA in Excel.
Where expression represents the ListRows.
Position is an optional parameter. It represents the relative position of the new row. Accepts the Integer value.
AlwaysInsert is an optional parameter. It represents the cells to be shifted to down or not, based on Boolean value. Accepts the Boolean value either True or False.
Note: If position is not specified, default adds new row at the end of the table.
Example to Add New Row to Table on the Worksheet
Let us see the example to add new row to table on the worksheet. The sheet name defined as ‘Table‘. And we use table name as ‘MyDynamicTable‘. You can change these two as per your requirement. We Add method of the ListObject object.
Output: Here is the following output screenshot of above example macro VBA code.
Add Multiple Rows to Table in Excel using VBA
Here is another example to add multiple rows to table. In this example we add five(5) rows to the table. You can specify the number of rows count in the for loop.
Output: Let us see the following output screenshot of above example macro VBA code.
Add Row & Data to Table on the Worksheet in Excel
Let us see how to add new row and data to the table using VBA in Excel. In the below example we add new row and data of 5 columns.
Output: Here is the following output screenshot of above example VBA macro code.
Instructions to Run VBA Macro Code or Procedure:
You can refer the following link for the step by step instructions.
Other Useful Resources:
Click on the following links of the useful resources. These helps to learn and gain more knowledge.
Источник
Vba excel умная таблица добавить строку
Здравствуйте!
Есть таблица, есть кнопка, которая макросом добавляет новую строку снизу, в конце таблицы, пустую (с таким же стилем как и таблица). И сама кнопка тоже прыгает немного вниз, следом (для удобства).
Как такое реализовать с умной таблицей? Нашел пример, он работает, правда с обычной таблицей, но если ее превратить в умную (пример прилагаю) то уже пишет что была попытка сдвинуть ячейку..
И еще вопрос, поможете разобраться с макросом? Вот его часть
[vba]
For i = 1 To 20
With Cells(Range(«Итоги»).Row — 1, i)
If Left(.Formula, 1) <> «=» Then .Clear
End With
Почему от 1 до 20 именно? и что за сумма «=SUM(R4C:R[-1]C)» ?
Хочу разобраться в этом.. Заранее благодарю!
Здравствуйте!
Есть таблица, есть кнопка, которая макросом добавляет новую строку снизу, в конце таблицы, пустую (с таким же стилем как и таблица). И сама кнопка тоже прыгает немного вниз, следом (для удобства).
Как такое реализовать с умной таблицей? Нашел пример, он работает, правда с обычной таблицей, но если ее превратить в умную (пример прилагаю) то уже пишет что была попытка сдвинуть ячейку..
И еще вопрос, поможете разобраться с макросом? Вот его часть
[vba]
For i = 1 To 20
With Cells(Range(«Итоги»).Row — 1, i)
If Left(.Formula, 1) <> «=» Then .Clear
End With
Почему от 1 до 20 именно? и что за сумма «=SUM(R4C:R[-1]C)» ?
Хочу разобраться в этом.. Заранее благодарю! NomaK
Сообщение Здравствуйте!
Есть таблица, есть кнопка, которая макросом добавляет новую строку снизу, в конце таблицы, пустую (с таким же стилем как и таблица). И сама кнопка тоже прыгает немного вниз, следом (для удобства).
Как такое реализовать с умной таблицей? Нашел пример, он работает, правда с обычной таблицей, но если ее превратить в умную (пример прилагаю) то уже пишет что была попытка сдвинуть ячейку..
И еще вопрос, поможете разобраться с макросом? Вот его часть
[vba]
For i = 1 To 20
With Cells(Range(«Итоги»).Row — 1, i)
If Left(.Formula, 1) <> «=» Then .Clear
End With
Почему от 1 до 20 именно? и что за сумма «=SUM(R4C:R[-1]C)» ?
Хочу разобраться в этом.. Заранее благодарю! Автор — NomaK
Дата добавления — 09.06.2020 в 17:16
Pelena | Дата: Вторник, 09.06.2020, 19:26 | Сообщение № 2 | ||||||||||||||||||||||||||||||||||||||||
Ответить |
|||||||||||||||||||||||||||||||||||||||||
|
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
1 |
|
Excel Добавление строк в таблицу20.05.2018, 20:40. Показов 29544. Ответов 52
Ребят, нужно по условию добавлять строки в нужные места. Никак не соображу как. Подскажите пожалуйста. Спасибо
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
20.05.2018, 20:40 |
Ответы с готовыми решениями:
Из исходной таблицы в n строк и 6 столбцов нужно сделать таблицу-результат из кучи строк и 6 столбцов учусь в универcитете, начал изучать макросы и подвернулась "интересная" задача -… Добавление данных в таблицу Имеется "Умная таблица", в…
52 |
3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,928 |
|
21.05.2018, 09:04 |
2 |
файл в студию и описание что да как согласно файла.
1 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
21.05.2018, 09:39 [ТС] |
3 |
Нужно сделать когда 15 столбец пустой, добавлялась вниз строка.
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,998 |
|
21.05.2018, 09:41 |
4 |
Никак не соображу как А вам пока можно и не соображать, зксель сам создаст макрос добавления строки.
1 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
21.05.2018, 09:50 [ТС] |
5 |
Пробывал…Вот: И добавляет на строку вверх. Мне нужно insert и вниз. Всю голову сломал
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,998 |
|
21.05.2018, 11:25 |
6 |
mor_sergey, ну так и вставайте (выделяйте) строку на одну ниже
1 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
21.05.2018, 11:35 [ТС] |
7 |
я пишу прогу по учету СИЗ. основное и самое сложное казалось бы сделал….а тут такая ерунда и непонимаю.может просто устал.напишите просто код.невыходит ничего.
0 |
shanemac51 Модератор 11336 / 4655 / 748 Регистрация: 07.08.2010 Сообщений: 13,484 Записей в блоге: 4 |
||||
21.05.2018, 11:58 |
8 |
|||
попробуйте
2 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
21.05.2018, 12:30 [ТС] |
9 |
только выделяет.вставки строки нет.буду думать дальше. Спасибо
0 |
Burk 1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,998 |
||||
21.05.2018, 18:46 |
10 |
|||
mor_sergey, что-то трудно разобрать, что за простушку вы не понимаете, если учитывать, что вы там почти всё сделали. Пусть вам нужно вставить строку после некоторой строки с номером N. Это сделать так
И вставится пустая после строки N. Рекодер так и пишет.
2 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
21.05.2018, 20:02 [ТС] |
11 |
Ребят, уж простите дебила. Убей непойму как добавить ВНИЗ по условию из моего примера ВЫШЕ строки
0 |
Burk 1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,998 |
||||
22.05.2018, 04:49 |
12 |
|||
mor_sergey, ну это, похоже, безнадежно. ВОСПОЛЬЗУЙТЕСЬ ВСТАВКОЙ, КОТОРУЮ Я НАПИСАЛ, ИЛИ ОБЪЯСНИТЕ, ПОЧЕМУ ОНА ВАМ НЕ ПОДХОДИТ!. не пойму пишется раздельно Добавлено через 43 минуты
2 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
22.05.2018, 09:25 [ТС] |
13 |
Дружище спасибо огромное. работает.додумываю под свои нужды.пример во вкладке. В 9 столбце между 2 и 3 строчкой вставить значения из 10 столбца под (таблицей).и так с каждой строкой столбца 9) Очень мне помог в любом случае.спасибо
0 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
22.05.2018, 09:42 [ТС] |
14 |
поправка……В10 столбце умной таблицы между 2 и 3 строчкой вставить значения из 10 столбца (под таблицей).и так с каждой строкой столбца 9)
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,998 |
|
22.05.2018, 11:33 |
15 |
mor_sergey, мутно написано. Надо добавить в книгу1 ещё одну страницу, на которой нужно изобразить первый лист с вашими вставками, т.е. показать желаемый конечный результат
1 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
22.05.2018, 11:51 [ТС] |
16 |
Вот посмотрите.
0 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
22.05.2018, 11:53 [ТС] |
17 |
Вот, посмотрите
0 |
Burk 1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,998 |
||||
22.05.2018, 15:57 |
18 |
|||
mor_sergey, всегда будут добавляться 7 строк?
2 |
77 / 11 / 0 Регистрация: 28.03.2018 Сообщений: 828 |
|
22.05.2018, 16:24 [ТС] |
19 |
Дружище, спасибо тебе огромное. До цикла я уже додумался. Теперь незнаю как со следующими строками быть. К тем, что ниже, тоже такой цикл применить нужно. Но дело в том, что нумерация строк меняется. А количество не постоянное (не 7). зависит от должности (к каждой привязаны определенные СИЗ)…они на другом листе. я заполняю таблицу целиком через форму (комбобоксы, листбоксы, текстбоксы)……прорабатываю другой вариант заполнения БД. не через форму, а напрямую в экселе……и, заполнив колонки с 1 по 9 остальные отрабатывает макрос.
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,998 |
|
22.05.2018, 17:00 |
20 |
mor_sergey, вам надо продумать систему, например, набирать числа 1-7 нет смысла, наверняка нумерация начинается с 1. Поэтому для должностей можно создать информационную таблицу, в которой указывается количество строчек этой должности, например, Токарь — 10 повар — 3 начальник -1
1 |
В данном практическом примере приведен код макроса для умной вставки пустых строк между ячейками. Пошаговая инструкция как вставлять строки между объединенными и необъединенными ячейками одновременно для любой таблицы.
Макрос для вставки строк с определенной высотой
В таблице отчета по продажам в розничных точках содержаться объединенные ячейки, как показано ниже на рисунке:
Необходимо экспонировать группы ячеек для каждого штата. Для этого мы добавим по одной пустой строке между каждой группой розничных точек. При этом не имеет значение будет ли содержать группа объединенные ячейки или нет. Ведь некоторые группы состоят из одной строки. А также дополнительно уменьшим высоту этих пустых строк, чтобы внешний вид таблицы был стильным. Выполнить вручную все эти действия: выделение отдельных групп ячеек, вставка между ними пустых строк, а потом изменение высоты для этих же строк – это не рационально использование сил и времени. Особенно если таблица имеет десятки тысяч строк. Лучше написать свой макрос, который сам автоматически и молниеносно выполнит эту рутинную работу за Вас.
Перейдите в режим редактора макросов Visual Basic (ALT+F11):
Создайте в нем новый модуль с помощью инструмента: «Insert»-«Module». А потом запишите в него VBA-код самого макроса:
Sub VstavkaStrok()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
pustroka = Selection(i, 1).Row + 1
ActiveSheet.Rows(pustroka).Insert xlShiftDown
ActiveSheet.Rows(pustroka).RowHeight = 7
ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Interior. _
ColorIndex = xlColorIndexNone
i = i - Selection(i, 1).MergeArea.Rows.Count + 1
Next
End Sub
Теперь если мы хотим вставить по одной пустой строке между каждой объединенной и необъединенной ячейкой, которые находиться в столбце A? Тогда а в таблице отчета по продажам выделяем диапазон ячеек A:D18 и запускаем наш макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«VstavkaStrok»-«Выполнить». После запуска макроса таблица будет выглядеть как показано на рисунке:
Сначала в коде объявлены две переменные:
- i – переменная выполняет роль счетчика в цикле.
- pustroka – переменная будет хранить в себе очередной номер для каждой строки выделенного диапазона.
В макросе находиться цикл, который запускает целый ряд инструкций для каждой строки в выделенном диапазоне ячеек. Направление цикла идет с нижней строки выделения к верхней.
- В первой инструкции мы присваиваем для переменной pustroka номер строки которая находиться под текущей строкой.
- Следующая инструкция добавляет пустую строку с высотой в 7 пикселей.
- Удаляются в добавленной строке все вертикальные границы, а также заливка.
- Уменьшается значение переменной i на количество строк, которые охватывает текущая объединенная ячейка, находящаяся в первом столбце выделенного диапазона.
Умная вставка строк с помощью макроса
Если же мы хотим экспонировать только самые большие группы. Допустим Вы желаете сделать так, чтобы макросом были вставлены пустые строки только после объединенных ячеек в столбце A, которые охватывают много строк. И не вставлять пустые строки после необъединенных ячеек или тех объединенных ячеек, которые охватывают не более 1-ой строки. Тогда после строки в коде макроса где описано начало цикла добавляем строку кода с условной инструкцией:
If Selection(i, 1).MergeArea.Rows.Count <> 1 Then
Также перед инструкцией конца цикла Next следует вставить инструкцию конца условия – End If.
Обратите внимание! Параметр условия для игнорирования объединенных ячеек с определенным количеством озвучиваемых строк можно будет даже настраивать, изменяя число после оператора сравнения.
Такая модификация кода макроса внутри цикла будет следить за тем применять ли ряд инструкций к текущей строке или игнорировать их на данном этапе прохода по срокам. Если же текущая строка не содержит необъединенной ячейки или объединенная ячейка охватывает более чем 1-ну строку, тогда для нее применяться все инструкции форматирования. Полная версия модифицированного года выглядит так:
Sub VstavkaStrok1()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
If Selection(i, 1).MergeArea.Rows.Count <> 1 Then
pustroka = Selection(i, 1).Row + 1
ActiveSheet.Rows(pustroka).Insert xlShiftDown
ActiveSheet.Rows(pustroka).RowHeight = 7
ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Interior. _
ColorIndex = xlColorIndexNone
i = i - Selection(i, 1).MergeArea.Rows.Count + 1
End If
Next
End Sub
Результат автоматического форматирования таблицы отчета с учетом новых условий в коде макроса:
Как видите с помощью макросов таблицы любых объемов данных можно форматировать в один клик мышкой.