Excel 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. Создание таблицы (умной, обычной)


 

Главная цель: получить в умную таблицу одинакового количества строк с первичной таблицей (на том же листе слева)  

Вариант 1: Пытаюсь присвоить таблице новый диапазон, взяв значение из ячейки
Вариант 2: Или, оптимально добавить определенное количество новых строк используя  ActiveSheet.ListObjects(1).ListRows.Add  — но не берет значение

 

SuperCat

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#2

17.11.2016 15:12:14

Код
ActiveSheet.ListObjects(1).Resize Range("H1:N22")

There is no knowledge that is not power

 

Спасибо большое за Ваш ответ!
Только хочу уточнить, есть ли возможность значение для Range брать из ячейки с формулой или в самом макросе определять количество строк исходя из размеров соседней таблицы? Спасибо.

 

SuperCat

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#4

17.11.2016 15:25:44

Параметр в Range — строка, поэтому можно указывать значение из любого источника (с листа, из переменной). Например:

Код
ActiveSheet.ListObjects(1).Resize Range(ActiveSheet.Range("E1").Value)

There is no knowledge that is not power

 

Дмитрий Марков

Пользователь

Сообщений: 140
Регистрация: 24.02.2015

#5

17.11.2016 15:35:32

Я сослался на ячейку со значением адреса диапазона, получил сообщение:

Код
Sub Макрос1()
'
' Макрос1 Макрос
'
'
    Range("D1").Select
    ActiveCell.FormulaR1C1 = _
        "=""$H$1:""&ADDRESS(MATCH(LOOKUP(999999999,C[-3]),C[-3],0),14,1)"
    Trim (ActiveSheet.Range("D1").Value)

    ActiveSheet.ListObjects(1).Select
    ActiveSheet.ListObjects(1).Resize Range(ActiveSheet.Range("D1").Value)
End Sub

Прикрепленные файлы

  • property of method.png (20.02 КБ)

Изменено: Дмитрий Марков17.11.2016 15:50:58

 

SuperCat

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

Неплохо было бы код приложить

There is no knowledge that is not power

 

SuperCat

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

ActiveSheet.ListObjects(1).Select
Это зачем? Да и объект ListObject не имеет метода Select — поэтому и ошибка.

There is no knowledge that is not power

 

Да, действительно, это незачем.
Большое спасибо за решение, всё получилось!

 

SuperCat

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

На здоровье

There is no knowledge that is not power

 

Елена Дроздова

Пользователь

Сообщений: 106
Регистрация: 14.04.2021

#10

02.06.2022 10:14:02

Добрый день!
Мне тоже нужно добавить множество строк в умную таблицу. Пытаюсь использовать код ниже, но почему-то ругается, ошибка 1004((

Код
Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").Resize Range(Workbooks("Расчетка Претензионного отдела").Worksheets("Библиотека").ListObjects("Таблица3").Range(Cells(2,21),Cells(LastRow1+LastRow,21)).Value)

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

Код
Sub Копилка()
    Workbooks("Расчетка Претензионного отдела.xlsm").Activate
    Sheets("Библиотека").Select
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(2, 1), Cells(LastRow, 20)).Copy
    Workbooks.Open ("C:UsersМарияOneDriveРаботаНакопительБиблиотека.xlsm")
    Workbooks("НакопительБиблиотека").Sheets("Лист1").Select
    LastRow1 = Workbooks("НакопительБиблиотека").Worksheets("Лист1").Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").ListRows.Add
    Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").Range.Cells(LastRow1 + 1, 1).PasteSpecial Paste:=xlPasteValues
    LastRow2 = Workbooks("НакопительБиблиотека").Worksheets("Лист1").Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    For i = LastRow + 1 To LastRow2
        Cells(i, 21) = name
    Next i
End Sub

Помогите, пожалуйста

Изменено: Елена Дроздова02.06.2022 10:17:23

 

Елена Дроздова

Пользователь

Сообщений: 106
Регистрация: 14.04.2021

#11

02.06.2022 10:35:11

Вот такой вариант тоже не проходит, та же ошибка(

Код
    Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").Resize Range(Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").Range(Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").Rows.Count + LastRow))
 

МатросНаЗебре

Пользователь

Сообщений: 5507
Регистрация: 05.02.2014

#12

02.06.2022 10:48:18

Код
Sub Копилка()
    Workbooks("Расчетка Претензионного отдела.xlsm").Activate
    Sheets("Библиотека").Select
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(2, 1), Cells(LastRow, 20)).Copy
    Workbooks.Open ("C:UsersМарияOneDriveРаботаНакопительБиблиотека.xlsm")
    Workbooks("НакопительБиблиотека").Sheets("Лист1").Select
    LastRow1 = Workbooks("НакопительБиблиотека").Worksheets("Лист1").Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    For i = 2 To LastRow
        Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").ListRows.Add
    Next
    Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").Range.Cells(LastRow1 + 1, 1).PasteSpecial Paste:=xlPasteValues
    LastRow2 = Workbooks("НакопительБиблиотека").Worksheets("Лист1").Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    For i = LastRow + 1 To LastRow2
        Cells(i, 21) = Name
    Next i
End Sub
 

Благодарю.
Подскажите, пожалуйста, а возможно ли ускорить процесс выполнения кода? Дело в том, что ему необходимо вставить более 16 тысяч строк. Вчера я писала для этой задачи другой код, чтобы макрос брал конкретные значения (по идее, мне не все столбцы нужны из копируемого объекта, но теперь уже пусть и их вставляет, не помешают) и вставлял их в нужные столбцы, попутно добавляя строки. После запуска макрос работал более 12 часов, но так и не доработал до конца, пришлось его останавливать(

 

МатросНаЗебре

Пользователь

Сообщений: 5507
Регистрация: 05.02.2014

#14

02.06.2022 11:20:15

Код
Sub Копилка()
    Dim Application_Calculation As Long
    Application_Calculation = Application.Calculation
    Application.Calculation = xlCalculationManual

    Workbooks("Расчетка Претензионного отдела.xlsm").Activate
    Sheets("Библиотека").Select
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(2, 1), Cells(LastRow, 20)).Copy
    Workbooks.Open ("C:UsersМарияOneDriveРаботаНакопительБиблиотека.xlsm")
    Workbooks("НакопительБиблиотека").Sheets("Лист1").Select
    LastRow1 = Workbooks("НакопительБиблиотека").Worksheets("Лист1").Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    
    With Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка")
        .Resize .Range.Resize(.Range.Rows.Count + LastRow - 2)
    End With
    Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка").Range.Cells(LastRow1 + 1, 1).PasteSpecial Paste:=xlPasteValues
    LastRow2 = Workbooks("НакопительБиблиотека").Worksheets("Лист1").Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    Cells(LastRow + 1, 21).Resize(LastRow2 - LastRow + 1) = Name
'    For i = LastRow + 1 To LastRow2
'        Cells(i, 21) = Name
'    Next i
    Application.Calculation = Application_Calculation
End Sub

Изменено: МатросНаЗебре02.06.2022 11:37:33
(Cells(LastRow + 1, 21).Resize(LastRow2 — LastRow + 1) = Name)

 

МатросНаЗебре, а можно немного пояснить?

 

МатросНаЗебре

Пользователь

Сообщений: 5507
Регистрация: 05.02.2014

#16

02.06.2022 11:40:17

Код
With Workbooks("НакопительБиблиотека").Worksheets("Лист1").ListObjects("Копилка")
 .Resize .Range.Resize(.Range.Rows.Count + LastRow - 2)
End With

Умную таблицу (Workbooks(«НакопительБиблиотека»).Worksheets(«Лист1»).ListObjects(«Копилка»))
переразмерить (.Resize)
на диапазон, который она сейчас занимает, увеличенный на ?? строк (.Range.Resize(.Range.Rows.Count + LastRow — 2))

PS
В сообщении #14 строку надо заменить

Код
Cells(LastRow + 1, 21).Resize(LastRow2 - LastRow + 1) = Name
 

Код из сообщения 14 работает уже 20 минут… Мне страшно)

 

Там почти нет длительных процедур.
Предположу, что открывается файл НакопительБиблиотека.xlsm.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#19

02.06.2022 12:02:53

Код
Sub Копилка2()
    Dim ar, LastRow&
    With Workbooks("Расчетка Претензионного отдела.xlsm").Sheets("Библиотека")
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        ar = .Range(.Cells(2, 1), .Cells(LastRow, 5)).Value
    End With
    ReDim Preserve ar(1 To UBound(ar), 1 To UBound(ar, 2) + 1)
    For i = 1 To UBound(ar)
        ar(i, UBound(ar, 2)) = Name
    Next
    With Workbooks.Open("C:UsersМарияOneDriveРаботаНакопительБиблиотека.xlsm").Sheets("Лист1").ListObjects("Копилка")
        .Range(1).Offset(.ListRows.Count + 1).Resize(UBound(ar), UBound(ar, 2)).Value = ar
    End With
End Sub
 

Елена Дроздова

Пользователь

Сообщений: 106
Регистрация: 14.04.2021

#20

02.06.2022 12:52:25

Цитата
написал:
Там почти нет длительных процедур.
Предположу, что открывается файл НакопительБиблиотека.xlsm.

Открывается быстро, видно, как начинает добавлять строки, потом ничего не видно, серое окно с вращающимся колесиком висит уже больше часа

 

МатросНаЗебре

Пользователь

Сообщений: 5507
Регистрация: 05.02.2014

#21

02.06.2022 12:55:50

Цитата
написал:
видно, как начинает добавлять строки

Не должно быть такого.
Уверены, что используете код из #14, а не из #12?
В #19, кстати, тоже отличный вариант.

 

Уверена, проверила. Сейчас попробую из 19

 

Елена Дроздова

Пользователь

Сообщений: 106
Регистрация: 14.04.2021

#23

02.06.2022 13:02:18

Цитата
написал:
Не должно быть такого.

Не так выразилась: он добавил строки, потом некоторое время ничего не происходило видимого, а потом серое окно и все

 

Код из 19 сообщения сработал на ура! Большое спасибо.

Но почему-то заполнены оказались строки с 16776, а со 2 по 16775 строки пусты.

Изменено: Елена Дроздова02.06.2022 13:08:38

 

Елена Дроздова

Пользователь

Сообщений: 106
Регистрация: 14.04.2021

#25

02.06.2022 13:22:20

Видимо, не зачистила после прошлой попытки. Все работает, огромное спасибо за помощь!

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

anisimovaleksandr32

Дата: Среда, 06.04.2022, 16:01 |
Сообщение № 1

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

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

Сообщений: 38

Добрый день всем!!!
Помогите реализовать задумку (сам смог лишь к этому прийти — не без помощи интеренета)

Имеется таблица (в некоторых столбцах имеются формулы) 5 строк в данной таблице никогда не удаляются
Задача:
в ячейке Е1 значение (условие) которое говорит о количестве строк в данной таблице (оно не будет ниже 5 — никогда)
Задача дополнить нужное количество строк чтоб реализовать условие

Заранее спасибо огромное всем кто откликнется

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

4171264.xlsm
(18.3 Kb)

Сообщение отредактировал anisimovaleksandr32Среда, 06.04.2022, 16:01

 

Ответить

_Boroda_

Дата: Среда, 06.04.2022, 16:17 |
Сообщение № 2

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Положите файл xlsx (без макросов). У меня политика безопасности запрещает скачивать файлы с макросами


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

 

Ответить

anisimovaleksandr32

Дата: Среда, 06.04.2022, 16:53 |
Сообщение № 3

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

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

Сообщений: 38

_Boroda_, добрый день!!!
Рад очень вас слышать

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

8937348.xlsx
(11.4 Kb)

 

Ответить

_Boroda_

Дата: Среда, 06.04.2022, 18:07 |
Сообщение № 4

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

[vba]

Код

Sub Макрос1()
    Dim tb As Object
    n_ = Cells(1, 5).Value
    If n_ <= 5 Then Exit Sub
    Set tb = ActiveSheet.ListObjects(«Таблица1»)
    nr_ = tb.ListRows.Count
    ndob_ = n_ — nr_
    If ndob_ < 1 Then
        MsgBox «В таблице уже есть » & n_ & » строк»
        Exit Sub
    End If
    Application.ScreenUpdating = 0
    Application.Calculation = 3
    tb.ShowTotals = True
    Cells(Range(tb).Row + nr_, 1).Resize(ndob_).EntireRow.Insert
    tb.ShowTotals = False
    Application.Calculation = 1
    Application.ScreenUpdating = 1
End Sub

[/vba]


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

 

Ответить

anisimovaleksandr32

Дата: Среда, 06.04.2022, 18:54 |
Сообщение № 5

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

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

Сообщений: 38

_Boroda_, спасибо огромное!!!
Я дико извеняюсь!!!
Не могли бы помочь разобраться (просто расписал комментариями):

Но не могли бы дополнить данный код не а удалением строк

Данная таблица ни когда не будет меньше 5 основных строк
— она может дополнятся
— она может уменьшаться /удаляться
до нужных количеств строк в зависимости от ячейки Е1(условие)

А так прям на УРА hands СПАСИБО ОГРОМНЕЙШЕЕ

 

Ответить

anisimovaleksandr32

Дата: Среда, 06.04.2022, 19:14 |
Сообщение № 6

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

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

Сообщений: 38

пытаюсь убрать MsgBox
И врезаться так вот %) :'(

как топором работаю (((( прекрасно осознаю

Сообщение отредактировал anisimovaleksandr32Среда, 06.04.2022, 19:19

 

Ответить

anisimovaleksandr32

Дата: Среда, 06.04.2022, 19:58 |
Сообщение № 7

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

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

Сообщений: 38

По сути срабатывает но не корретно %) :'(

Сообщение отредактировал anisimovaleksandr32Среда, 06.04.2022, 19:58

 

Ответить

_Boroda_

Дата: Четверг, 07.04.2022, 11:41 |
Сообщение № 8

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

[vba]

Код

Sub Макрос1()
    Dim tb As Object
    n_ = Cells(1, 5).Value
    If n_ < 5 Then Exit Sub
    Set tb = ActiveSheet.ListObjects(«Таблица1»)
    nr_ = tb.ListRows.Count
    ndob_ = n_ — nr_
    If ndob_ Then
        Application.ScreenUpdating = 0
        Application.Calculation = 3
        If ndob_ > 0 Then
            For i = 1 To Abs(ndob_)
                tb.ListRows.Add
            Next i
        Else
            For i = 1 To Abs(ndob_)
                tb.ListRows(6).Delete
            Next i
        End If
        Application.Calculation = 1
        Application.ScreenUpdating = 1
    End If
End Sub

[/vba]


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

 

Ответить

Содержание

  1. VBA Excel. Создание таблицы (умной, обычной)
  2. Создание и удаление умной таблицы
  3. Создание умной таблицы
  4. Стиль умной таблицы
  5. Макрос для добавления строк с заданной высотой в таблицу Excel
  6. Макрос для вставки строк с определенной высотой
  7. Умная вставка строк с помощью макроса
  8. Метод ListRows.Add (Excel)
  9. Синтаксис
  10. Параметры
  11. Возвращаемое значение
  12. Замечания
  13. Пример
  14. Поддержка и обратная связь
  15. VBA Add row to Table in Excel
  16. Syntax to Add Row to Table using VBA in Excel
  17. Example to Add New Row to Table on the Worksheet
  18. Add Multiple Rows to Table in Excel using VBA
  19. Add Row & Data to Table on the Worksheet in Excel
  20. Instructions to Run VBA Macro Code or Procedure:
  21. Other Useful Resources:
  22. 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»-«Выполнить». После запуска макроса таблица будет выглядеть как показано на рисунке:

Сначала в коде объявлены две переменные:

  1. i – переменная выполняет роль счетчика в цикле.
  2. pustroka – переменная будет хранить в себе очередной номер для каждой строки выделенного диапазона.

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

  1. В первой инструкции мы присваиваем для переменной pustroka номер строки которая находиться под текущей строкой.
  2. Следующая инструкция добавляет пустую строку с высотой в 7 пикселей.
  3. Удаляются в добавленной строке все вертикальные границы, а также заливка.
  4. Уменьшается значение переменной 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
«Черт возьми, Холмс! Но как. »
Ю-money 41001765434816

Ответить

RAN Дата: Вторник, 09.06.2020, 21:25 | Сообщение № 3
Быть или не быть, вот в чем загвоздка!

Ответить

Pelena Дата: Вторник, 09.06.2020, 21:36 | Сообщение № 4
«Черт возьми, Холмс! Но как. »
Ю-money 41001765434816

Ответить

RAN Дата: Вторник, 09.06.2020, 21:55 | Сообщение № 5
Быть или не быть, вот в чем загвоздка!

Ответить

Pelena Дата: Вторник, 09.06.2020, 22:08 | Сообщение № 6
«Черт возьми, Холмс! Но как. »
Ю-money 41001765434816

Ответить

NomaK Дата: Среда, 10.06.2020, 03:04 | Сообщение № 7
NomaK Дата: Среда, 10.06.2020, 03:58 | Сообщение № 8
NomaK Дата: Среда, 10.06.2020, 04:58 | Сообщение № 9

Ничего не получается если пытаюсь сделать пошагово сам то же самое.

Пример прилагаю со своей таблицей, к которой не могу приделать кнопку.

И еще пару вопросов, что за привязка к ячейке С12 в строке Range(«C12»).Select ?
И обязательно ли сохранять файл в xlsm?
При сохранении даже Вашего файла, постоянно пишет про какую то конфиденциальность, ок-отмена.. Как этого всего избежать

Ничего не получается если пытаюсь сделать пошагово сам то же самое.

Пример прилагаю со своей таблицей, к которой не могу приделать кнопку.

И еще пару вопросов, что за привязка к ячейке С12 в строке Range(«C12»).Select ?
И обязательно ли сохранять файл в xlsm?
При сохранении даже Вашего файла, постоянно пишет про какую то конфиденциальность, ок-отмена.. Как этого всего избежать NomaK

Сообщение Ничего не получается если пытаюсь сделать пошагово сам то же самое.

Пример прилагаю со своей таблицей, к которой не могу приделать кнопку.

И еще пару вопросов, что за привязка к ячейке С12 в строке Range(«C12»).Select ?
И обязательно ли сохранять файл в xlsm?
При сохранении даже Вашего файла, постоянно пишет про какую то конфиденциальность, ок-отмена.. Как этого всего избежать Автор — NomaK
Дата добавления — 10.06.2020 в 04:58

Источник

Adblock
detector

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

Ответы с готовыми решениями:

Добавление в таблицу строк по заданному количеству)
Ребят, как в моем примере сделать так, чтобы если указал в UserForm 80 месяцев (допустим), то на…

Из исходной таблицы в n строк и 6 столбцов нужно сделать таблицу-результат из кучи строк и 6 столбцов
Добрый вечер,

учусь в универcитете, начал изучать макросы и подвернулась &quot;интересная&quot; задача -…

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

Имеется &quot;Умная таблица&quot;, в…

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

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

Цитата
Сообщение от mor_sergey
Посмотреть сообщение

Никак не соображу как

А вам пока можно и не соображать, зксель сам создаст макрос добавления строки.
Вкладка Разработчик — Запись макроса — Ок Потом встать на нужную строку и нажать правую кнопку мыши, выбрать Добавить строку и потом Остановить запись. Получите макрос для добавления (из него можно взять только две строчки кода. Перед ними ставите ваше условие оператором If ….. End If и всё готово



1



77 / 11 / 0

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

Сообщений: 828

21.05.2018, 09:50

 [ТС]

5

Пробывал…Вот:
Selection.ListObject.ListRows.Add (3)

И добавляет на строку вверх. Мне нужно 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

Модератор

Эксперт MS Access

11336 / 4655 / 748

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

Сообщений: 13,484

Записей в блоге: 4

21.05.2018, 11:58

8

попробуйте

Visual Basic
1
2
3
4
5
Sub Макрос6()
'    Range("N6").Select
    Selection.ListObject.ListRows.Add AlwaysInsert:=True
    Range("N7").Select
End Sub



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. Это сделать так

Visual Basic
1
 Rows(N+1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

И вставится пустая после строки 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 минуты
mor_sergey, N — номер, нужной вам строки

Visual Basic
1
2
3
If Cells(N, 15) = "" Then 
  Rows(N+1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If



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 строк?
А почему вы не решаетесь такую простую добавку сделать самостоятельно или хотя бы попробовать. Ведь всего-то нужно код с добавкой строки (Insert) заключить в цикл

Visual Basic
1
2
3
4
For i = 1 to 7
'сюда строка кода добавки строки c Insert и потом
Cells(N+1,10)= 8-i
next



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):

Basic.

Создайте в нем новый модуль с помощью инструмента: «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

VBA code.

Теперь если мы хотим вставить по одной пустой строке между каждой объединенной и необъединенной ячейкой, которые находиться в столбце A? Тогда а в таблице отчета по продажам выделяем диапазон ячеек A:D18 и запускаем наш макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«VstavkaStrok»-«Выполнить». После запуска макроса таблица будет выглядеть как показано на рисунке:

Пример.

Сначала в коде объявлены две переменные:

  1. i – переменная выполняет роль счетчика в цикле.
  2. pustroka – переменная будет хранить в себе очередной номер для каждой строки выделенного диапазона.

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

  1. В первой инструкции мы присваиваем для переменной pustroka номер строки которая находиться под текущей строкой.
  2. Следующая инструкция добавляет пустую строку с высотой в 7 пикселей.
  3. Удаляются в добавленной строке все вертикальные границы, а также заливка.
  4. Уменьшается значение переменной 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

Результат автоматического форматирования таблицы отчета с учетом новых условий в коде макроса:

Умная вставка.

Как видите с помощью макросов таблицы любых объемов данных можно форматировать в один клик мышкой.

Понравилась статья? Поделить с друзьями:
  • Excel vba задать область печати
  • Excel vba задать массив констант
  • Excel vba задать границу ячеек
  • Excel vba добавить модуль
  • Excel vba задание переменной