Прошу помочь с решением макроса. Нужно: перенести выделенную строку над другой выделенной строкой.
Нашел макрос, который переставляет местами выделенные строки: [vba]
Код
Sub RowSwapper() Dim tempRRay As Variant With Selection With Range(.Areas(1), .Areas(.Areas.Count)).EntireRow tempRRay = .Rows(1).Value .Rows(1).Value = .Rows(.Rows.Count).Value .Rows(.Rows.Count).Value = tempRRay End With End With End Sub
[/vba]
В этом макросе сбиваются все формулы и цвет текста становится черным.
Прошу помочь с решением макроса. Нужно: перенести выделенную строку над другой выделенной строкой.
Нашел макрос, который переставляет местами выделенные строки: [vba]
Код
Sub RowSwapper() Dim tempRRay As Variant With Selection With Range(.Areas(1), .Areas(.Areas.Count)).EntireRow tempRRay = .Rows(1).Value .Rows(1).Value = .Rows(.Rows.Count).Value .Rows(.Rows.Count).Value = tempRRay End With End With End Sub
[/vba]
В этом макросе сбиваются все формулы и цвет текста становится черным.den45444
А зачем вам переставлять именно выделенные строки местами? Не проще ли добавить столбец с нумерацией позиций внутри раздела - и затем просто отсортировать по нему? Кроме того, тут есть такая тонкость - если вы начинаете использовать макросы, изменяющие структуру диапазонов - то в этих же макросах нужно предусмотреть проверку/замену формул листа, которые затрагивает работа макроса. Или вообще отказаться от формул листа (в модифицируемой области), и начать использовать самописные, аналогичные по функционалу, UDF в едином пространстве модулей макросов...
А зачем вам переставлять именно выделенные строки местами? Не проще ли добавить столбец с нумерацией позиций внутри раздела - и затем просто отсортировать по нему? Кроме того, тут есть такая тонкость - если вы начинаете использовать макросы, изменяющие структуру диапазонов - то в этих же макросах нужно предусмотреть проверку/замену формул листа, которые затрагивает работа макроса. Или вообще отказаться от формул листа (в модифицируемой области), и начать использовать самописные, аналогичные по функционалу, UDF в едином пространстве модулей макросов...AndreTM
Мне нужно не менять местами строки, а выделенную строку переставить в другое место
Совет от Елены, как привет из 2013-го: "Выделяете строку целиком (не диапазон) -- подводите мышку к верхней или нижней границе, чтобы получилась крестообразная стрелка (как для перетаскивания) -- зажимаете Shift на клавиатуре -- перемещаете строку целиком в нужное место -- отпускаете сначала мышку, затем Shift"
Мне нужно не менять местами строки, а выделенную строку переставить в другое место
Совет от Елены, как привет из 2013-го: "Выделяете строку целиком (не диапазон) -- подводите мышку к верхней или нижней границе, чтобы получилась крестообразная стрелка (как для перетаскивания) -- зажимаете Shift на клавиатуре -- перемещаете строку целиком в нужное место -- отпускаете сначала мышку, затем Shift"TimSha
Друзья мои, я надеюсь, вами движет только искреннее сочувствие к задаче ТС... Но не создавайте ему дополнительные проблемы
Я почему и завёл разговор - если вы собираетесь модифицировать объект (а удаление/вырезание/вставка строк листа - это что?) - не забывайте никогда о логике програмеров M$, закладвающих в функции листа иногда такие выверты... поэтому сразу озаботьтесь и контролем непротиворечивости данных, а также формул, основанных на этих данных; а не просто тыкайте в "готовые решения", которые "готовы" для других задач...
Друзья мои, я надеюсь, вами движет только искреннее сочувствие к задаче ТС... Но не создавайте ему дополнительные проблемы
Я почему и завёл разговор - если вы собираетесь модифицировать объект (а удаление/вырезание/вставка строк листа - это что?) - не забывайте никогда о логике програмеров M$, закладвающих в функции листа иногда такие выверты... поэтому сразу озаботьтесь и контролем непротиворечивости данных, а также формул, основанных на этих данных; а не просто тыкайте в "готовые решения", которые "готовы" для других задач... AndreTM
Совет от Елены, как привет из 2013-го: "Выделяете строку целиком (не диапазон) -- подводите мышку к верхней или нижней границе, чтобы получилась крестообразная стрелка (как для перетаскивания) -- зажимаете Shift на клавиатуре -- перемещаете строку целиком в нужное место -- отпускаете сначала мышку, затем Shift"
Этот способ я уже пробовал. Не помогает. У меня эксель 2007.
Совет от Елены, как привет из 2013-го: "Выделяете строку целиком (не диапазон) -- подводите мышку к верхней или нижней границе, чтобы получилась крестообразная стрелка (как для перетаскивания) -- зажимаете Shift на клавиатуре -- перемещаете строку целиком в нужное место -- отпускаете сначала мышку, затем Shift"
Этот способ я уже пробовал. Не помогает. У меня эксель 2007.den45444
den45444, я так понимаю, что Вам нужна возможность менять местами этапы? Можно перетаскивать с зажатым Shift, захватывая целиком группу со строкой Этап№ и голубой строкой в конце группы. Тогда формулы не сбиваются. Останется только скорректировать номера этапов.
Или другой способ (в файле) не захватывать в формуле строку со словом Этап№. В файле поменяла местами первый и второй этапы так же перетаскиванием с Shift
den45444, я так понимаю, что Вам нужна возможность менять местами этапы? Можно перетаскивать с зажатым Shift, захватывая целиком группу со строкой Этап№ и голубой строкой в конце группы. Тогда формулы не сбиваются. Останется только скорректировать номера этапов.
Или другой способ (в файле) не захватывать в формуле строку со словом Этап№. В файле поменяла местами первый и второй этапы так же перетаскиванием с ShiftPelena
Можно ничего не таскать, а испольковать команды вырезать и вставить вырезанные ячейки. Когда надоест таскать их поштучно, можно включить рекордер, и на основе записи написать код, позволяющий в одно нажатие перемещать сразу много строк.
Можно ничего не таскать, а испольковать команды вырезать и вставить вырезанные ячейки. Когда надоест таскать их поштучно, можно включить рекордер, и на основе записи написать код, позволяющий в одно нажатие перемещать сразу много строк.RAN
Задача решена. Пишу макрос, возможно кому-нибудь пригодится. [vba]
Код
Sub перенос_строк() Dim ra As Range: Set ra = Selection msg1 = "1)Выделите строки, которые нужно перенести; 2)Нажмите Ctrl; 3)Выделите еще одно строку, над которой нужно вставить; 4)Запустите макрос" If ra.Areas.Count <> 2 Then MsgBox msg1, vbCritical, "Ошибка": Exit Sub ra.Areas(1).Copy ra.Areas(2).Insert Shift:=xlDown ra.Areas(1).Delete End Sub
[/vba]
Тему можно закрыть.
Задача решена. Пишу макрос, возможно кому-нибудь пригодится. [vba]
Код
Sub перенос_строк() Dim ra As Range: Set ra = Selection msg1 = "1)Выделите строки, которые нужно перенести; 2)Нажмите Ctrl; 3)Выделите еще одно строку, над которой нужно вставить; 4)Запустите макрос" If ra.Areas.Count <> 2 Then MsgBox msg1, vbCritical, "Ошибка": Exit Sub ra.Areas(1).Copy ra.Areas(2).Insert Shift:=xlDown ra.Areas(1).Delete End Sub