Вставка строк при условии, на VBA
Модератор: Naeel Maqsudov
-
- Сообщения: 5
- Зарегистрирован: 21 апр 2014, 22:09
Подскажите пожалуйста, нужно вставить пустые строки перед столбцом уникальных чисел и пустыми ячейками
2
3
4
Х, если значение в столбце А не пустое и если оно не повторяется дальше вверх?
pashulka
все ответил, честь ему и хвала!
2
3
4
Х, если значение в столбце А не пустое и если оно не повторяется дальше вверх?
pashulka
все ответил, честь ему и хвала!
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
А для чего Вам нужны пустые строки? Уж не для вставки ли итоговых формул по группам?
Если так, то регион надо заполнять без дырок. Т.е.
Москва
Москва
Москва
Новгород
Новгород
Тула
Тула
И тогда можно будет выделить эту таблицу и воспользоваться меню Данные/Структура/Промежуточный Итог.
В диалоговом окне только указать, что при каждом изменении в «Регион» надо вставлять нужные итоговые функции по выбранным полям.
При этом будет создана структура, вставлены строки, вставлены формулы для вычисления итогов в каждой группе и общего итога с конце таблицы.
Если так, то регион надо заполнять без дырок. Т.е.
Москва
Москва
Москва
Новгород
Новгород
Тула
Тула
И тогда можно будет выделить эту таблицу и воспользоваться меню Данные/Структура/Промежуточный Итог.
В диалоговом окне только указать, что при каждом изменении в «Регион» надо вставлять нужные итоговые функции по выбранным полям.
При этом будет создана структура, вставлены строки, вставлены формулы для вычисления итогов в каждой группе и общего итога с конце таблицы.
-
- Сообщения: 5
- Зарегистрирован: 21 апр 2014, 22:09
это нужно для визуального разделения, а таблица выгружается автоматически с такими значениями, поэтому нужно разделить данные именно в такой форме
Применительно к Вашей таблице, это можно сделать следующим образом :Chinchilla писал(а):По идее нужно вставлять строки перед Х, 3, 2, если значение в столбце А не пустое ...
Код: Выделить всё
Range("A:A").SpecialCells(xlConstants, xlNumbers).EntireRow.Insert
-
- Сообщения: 5
- Зарегистрирован: 21 апр 2014, 22:09
pashulka писал(а):Применительно к Вашей таблице, это можно сделать следующим образом :
Код: Выделить всё
Range("A:A").SpecialCells(xlConstants, xlNumbers).EntireRow.Insert
гениально! спасибо! а несколько сразу?))
Если нужно добавить более одной строки, то я, обычно, использую свойство .Resize, т.к. это позволяет обойтись одной единственной строкой. К сожалению, в случае с несмежным диапазон, этот финт не прокатит, однако можно замутить что-то вроде этого :
P.S. Разумеется для двух строк такой огород городить не стоит, ибо можно просто дважды использовать первоначальный вариант.
Код: Выделить всё
Dim iSource As Range, iCount%
Set iSource = Range("A:A").SpecialCells(xlConstants, xlNumbers).EntireRow
Application.ScreenUpdating = False
For iCount = 1 To 10 'Кол-во строк
iSource.Insert
Next
Application.ScreenUpdating = True
-
- Сообщения: 5
- Зарегистрирован: 21 апр 2014, 22:09
огромнейшее спасибо!) если не очень нагло будет спросить, а как мне перед Москвой, т.е. после шапки изолировать пространство, чтобы не добавлялись туда строки?)pashulka писал(а):Если нужно добавить более одной строки, то я, обычно, использую свойство .Resize, т.к. это позволяет обойтись одной единственной строкой. К сожалению, в случае с несмежным диапазон, этот финт не прокатит, однако можно замутить что-то вроде этого :
P.S. Разумеется для двух строк такой огород городить не стоит, ибо можно просто дважды использовать первоначальный вариант.Код: Выделить всё
Dim iSource As Range, iCount% Set iSource = Range("A:A").SpecialCells(xlConstants, xlNumbers).EntireRow Application.ScreenUpdating = False For iCount = 1 To 10 'Кол-во строк iSource.Insert Next Application.ScreenUpdating = True
Если заголовок таблицы, иначе называемый шапка, это всегда вторая строка, а Москва, стало быть, начинается с ячейки A3, то одним из решений может являться :
Код: Выделить всё
Dim iSource As Range, iCount%
Set iSource = Range(Cells(4, 1), Cells(Rows.Count, 1).End(xlUp))
Set iSource = iSource.SpecialCells(xlConstants, xlNumbers).EntireRow
P.S. А если неизвестно откуда начинается шапка, то можно попробовать извернуться через цикл :
Код: Выделить всё
Dim iSource As Areas, iCount&
Set iSource = Range("A:A").SpecialCells(xlConstants, xlNumbers).EntireRow.Areas
'Application.ScreenUpdating = False
For iCount = 2 To iSource.Count
iSource(iCount).Resize(3).Insert '3 = Кол-во строк
Next
'Application.ScreenUpdating = True
-
- Сообщения: 5
- Зарегистрирован: 21 апр 2014, 22:09
огромное Вам спасибо) сколько же Вы жизней спасаете за вечер?))pashulka писал(а):Если заголовок таблицы, иначе называемый шапка, это всегда вторая строка, а Москва, стало быть, начинается с ячейки A3, то одним из решений может являться :
Код: Выделить всё
Dim iSource As Range, iCount% Set iSource = Range(Cells(4, 1), Cells(Rows.Count, 1).End(xlUp)) Set iSource = iSource.SpecialCells(xlConstants, xlNumbers).EntireRow
не знаете случайно хорошую литературу для начинающих по VBA?) логику понимаю, а вот код нужно узнать))