Вставка строк при условии, на VBA

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Chinchilla
Сообщения: 5
Зарегистрирован: 21 апр 2014, 22:09

Подскажите пожалуйста, нужно вставить пустые строки перед столбцом уникальных чисел и пустыми ячейками
2
3
4
Х, если значение в столбце А не пустое и если оно не повторяется дальше вверх?
pashulka
все ответил, честь ему и хвала!
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А для чего Вам нужны пустые строки? Уж не для вставки ли итоговых формул по группам?
Если так, то регион надо заполнять без дырок. Т.е.
Москва
Москва
Москва
Новгород
Новгород
Тула
Тула

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

При этом будет создана структура, вставлены строки, вставлены формулы для вычисления итогов в каждой группе и общего итога с конце таблицы.
Вложения
Безымянный..jpg
Chinchilla
Сообщения: 5
Зарегистрирован: 21 апр 2014, 22:09

это нужно для визуального разделения, а таблица выгружается автоматически с такими значениями, поэтому нужно разделить данные именно в такой форме
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Chinchilla писал(а):По идее нужно вставлять строки перед Х, 3, 2, если значение в столбце А не пустое ...
Применительно к Вашей таблице, это можно сделать следующим образом :

Код: Выделить всё

Range("A:A").SpecialCells(xlConstants, xlNumbers).EntireRow.Insert
Chinchilla
Сообщения: 5
Зарегистрирован: 21 апр 2014, 22:09

pashulka писал(а):Применительно к Вашей таблице, это можно сделать следующим образом :

Код: Выделить всё

Range("A:A").SpecialCells(xlConstants, xlNumbers).EntireRow.Insert

гениально! спасибо! а несколько сразу?))
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Если нужно добавить более одной строки, то я, обычно, использую свойство .Resize, т.к. это позволяет обойтись одной единственной строкой. К сожалению, в случае с несмежным диапазон, этот финт не прокатит, однако можно замутить что-то вроде этого :

Код: Выделить всё

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
P.S. Разумеется для двух строк такой огород городить не стоит, ибо можно просто дважды использовать первоначальный вариант.
Chinchilla
Сообщения: 5
Зарегистрирован: 21 апр 2014, 22:09

pashulka писал(а):Если нужно добавить более одной строки, то я, обычно, использую свойство .Resize, т.к. это позволяет обойтись одной единственной строкой. К сожалению, в случае с несмежным диапазон, этот финт не прокатит, однако можно замутить что-то вроде этого :

Код: Выделить всё

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
P.S. Разумеется для двух строк такой огород городить не стоит, ибо можно просто дважды использовать первоначальный вариант.
огромнейшее спасибо!) если не очень нагло будет спросить, а как мне перед Москвой, т.е. после шапки изолировать пространство, чтобы не добавлялись туда строки?)
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Если заголовок таблицы, иначе называемый шапка, это всегда вторая строка, а Москва, стало быть, начинается с ячейки 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
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

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
Chinchilla
Сообщения: 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?) логику понимаю, а вот код нужно узнать))
Ответить