Вставить ячейки между существующими данными - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть код для копирования - вставка диапазона после существующих столбцов. Существует необходимость иметь возможность распределять его также между существующими столбцами. Таким образом, он вставит скопированный диапазон справа после следующей выбранной ячейки. Проблема здесь в том, что нет возможности добавить больше столбцов с помощью «Вставить». Таким образом, существующие данные должны быть как-то сдвинуты вправо. По копии - вставить? Это единственное решение и как это сделать технически?

enter image description here

Так что, если я выберу объединенные ячейки H: I и нажму ADD, код переместитсяJ: K и L: M справа и вставьте скопированный диапазон туда, где недавно был J: K.

Мой текущий код кнопки ADD:

Sub CopyPasteTurbineOwnWork()
Application.ScreenUpdating = False
Dim StartRange As Range
Dim cello As Range

Set cello = Worksheets("Price calculation").Cells(13, Columns.Count)

Set StartRange = Worksheets("Price calculation").Range("D13")

StartRange.MergeArea.Copy
cello.End(xlToLeft).Offset(0, 1).PasteSpecial xlPasteAll

StartRange.Offset(1, 0).Resize(16, 2).Copy
cello.End(xlToLeft).Offset(1, 0).PasteSpecial xlPasteAll

StartRange.Offset(17, 0).MergeArea.Copy
cello.End(xlToLeft).Offset(17, 0).PasteSpecial xlPasteAll

StartRange.Offset(18, 0).Resize(2, 2).Copy
cello.End(xlToLeft).Offset(18, 0).PasteSpecial xlPasteAll

StartRange.Offset(148, 0).MergeArea.Copy
cello.End(xlToLeft).Offset(148, 0).PasteSpecial xlPasteAll

StartRange.Offset(149, 0).Resize(5, 2).Copy
cello.End(xlToLeft).Offset(149, 0).PasteSpecial xlPasteAll

Set StartRange = Nothing
Set pasteSheet = Nothing
Set cello = Nothing

Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 01 ноября 2019

Как вы утверждаете, вы хотите, чтобы весь столбец находился справа от выделенного элемента, но это не так просто, как выбор столбца, поскольку вы работаете с парами из 2 объединенных столбцов. Однако вместо того, чтобы копировать весь диапазон столбец за столбцом, вы все равно можете .Insert, если сделаете правильный выбор копии. Даже если вы хотите вставить две массивные объединенные ячейки, если они имеют такой же размер, как и остальная часть строки, вставка будет работать:

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

Sub insert_column()

Range("D13").Resize((Selection.Offset(1, 0).MergeArea.Rows.Count) + 1, 2).Copy

Selection.Offset(0, 1).insert shift:=xlToRight

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...