Я создал два макроса Excel Move_Entry_Down и Move_Entry_Up.Цель состоит в том, чтобы поменять местами строки, охватываемые текущим выделением, строкой над или под ней.
Макросы работают отлично.Моя единственная проблема заключается в том, что код довольно неаккуратный, использующий фиктивную строку в нижней части используемого диапазона и удаляющий строку после использования.
Есть ли способ сохранить все значения, формулы и форматы внекоторые объекты данных для «вставки специальных» позже.Я хочу, чтобы формулы обновлялись относительно их новой позиции после вставки.
Ниже приведен код макроса:
Sub Move_Entry_Down()
act_cell_col = ActiveCell.Column
act_cell_row = ActiveCell.Row
sel_row_1 = Selection.Rows(1).Row
sel_row_n = Selection.Rows.count + sel_row_1 - 1
sel_col_1 = Selection.Columns(1).Column
sel_col_n = Selection.Columns.count + sel_col_1 - 1
last_row = ActiveSheet.UsedRange.Rows.count
Range(sel_row_n + 1 & ":" & sel_row_n + 1).Copy
Rows(last_row + 1).PasteSpecial (xlPasteAll)
Range(sel_row_1 & ":" & sel_row_n).Copy
Rows(sel_row_1 + 1 & ":" & sel_row_n + 1).PasteSpecial (xlPasteAll)
Rows(last_row + 1 & ":" & last_row + 1).Copy
Rows(sel_row_1 & ":" & sel_row_1).PasteSpecial (xlPasteAll)
Rows(last_row + 1).Delete
ActiveSheet.UsedRange
Range(Cells(sel_row_1 + 1, sel_col_1), Cells(sel_row_n + 1, sel_col_n)).Select
End Sub
и ...
Sub Move_Entry_Up()
act_cell_col = ActiveCell.Column
act_cell_row = ActiveCell.Row
sel_row_1 = Selection.Rows(1).Row
sel_row_n = Selection.Rows.count + sel_row_1 - 1
sel_col_1 = Selection.Columns(1).Column
sel_col_n = Selection.Columns.count + sel_col_1 - 1
last_row = ActiveSheet.UsedRange.Rows.count
Range(sel_row_1 - 1 & ":" & sel_row_1 - 1).Copy
Rows(last_row + 1).PasteSpecial (xlPasteAll)
Range(sel_row_1 & ":" & sel_row_n).Copy
Rows(sel_row_1 - 1 & ":" & sel_row_n - 1).PasteSpecial (xlPasteAll)
Rows(last_row + 1 & ":" & last_row + 1).Copy
Rows(sel_row_n & ":" & sel_row_n).PasteSpecial (xlPasteAll)
Rows(last_row + 1).Delete
ActiveSheet.UsedRange
Range(Cells(sel_row_1 - 1, sel_col_1), Cells(sel_row_n - 1, sel_col_n)).Select
End Sub
Естьаналогичный вопрос в этой теме но, на мой взгляд, и вопрос, и ответ кажутся еще менее изящными, чем мое первоначальное решение.
Единственное, что я хочу изменить, - это сохранение смещенной строки в переменнойвместо заполнителя последнего ряда.