Excel - Vba вставка строки и сохранить членство в диапазоне

вопрос

В VBA, как мне скопировать / вставить (на месте) строку и убедиться, что если исходная строка пересекает диапазон столбцов, то новая строка также будет в этом диапазоне, и диапазон будет увеличиваться на 1 (т.е. вставленная строка),

Если курсор находится на строке, которая находится в верхней части диапазона, новая строка не становится членом диапазона, и диапазон не увеличивает размер на одну строку.

xlUp и xlDown не делают различий и не исключают их (что, по словам Excel, лучше всего делать, если у вас есть пересекающиеся столбчатые диапазоны).

Решение

Я делаю это полностью автоматически. Вам не нужно называть диапазон. макрос "тест" делает это. Единственный ввод, который вы должны ввести, - это ввод номера строки, которую нужно удалить, например, 2, 3 или 4, когда появится окно ввода. Макрос «отменяет» отменяет то, что делает макрос.

База данных такая от А1 до А5

1

2

3

4

5

ничего не делайте, просто запустите макрос «test» (оба макроса должны быть скопированы в модуль). Извините, это стало запутанным макросом. Я пытался использовать «изменить размер». так или иначе мне не удалось. Возможно, какой-то эксперт может дать лучшее решение. Но это решение работает. если вы хотите, чтобы диапазон именованного диапазона был другим, измените этот оператор в макросе "test", чтобы он вам подходил

Диапазон («A2: a4»). Name = «myrange»

Макросы:

Макрос 1

 Суб тест ()

Dim r As Range, j As Integer, k As Integer, m As Integer

расстегивать

Диапазон («A2: a4»). Name = «myrange»

Set r = Range ("myrange")

m = WorksheetFunction.Count (r)

MsgBox m

k = InputBox («введите номер выбранной строки»)

Строки (к) .Select

Set r = Range ("myrange")

j = Range ("myrange"). Ячейки (1, 1). Ряд

'MsgBox j

Selection.Rows.Insert

If Selection.Row = j Тогда

ActiveWorkbook.Names ( "MyRange"). Удалить

Range (Ячейки (Selection.Row, "A"), r.Cells (m, 1)). Name = "myrange"

End If

MsgBox Range («myrange»). Адрес

End Sub

Макрос 2

 Sub undo ()

Dim r As Range, c As Range

Установите r = Range (Range ("A1"), Cells (Rows.Count, "A"). End (xlUp))

Для каждого c In r

Если c = "", то c.EntireRow.Delete

Следующая с

End Sub

Заметка

Спасибо venkat1926 за этот совет
Предыдущая статья Следующая статья

Лучшие советы