Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2012, 20:07   #1
ПланктонOffice'ный
Новичок
Джуниор
 
Аватар для ПланктонOffice'ный
 
Регистрация: 24.06.2012
Сообщений: 2
По умолчанию Макрос VBA Excel (Поднять выделенную часть строки на позицию вверх)

Вопрос такой, как поднять выделенный участок строки на позицию вверх? Есть макрос, который поднимает всю строку, ячейка которой на данный момент выделена, а мне нужно поднять не всю строку, а ее часть, чтобы не задеть таблицу, которая находится справа от той в которой я работаю.

К примеру:

| 1| 2| 3| 4| ...... | 1| 1| 1|
| 2| 3| 4| 5| ...... | 2| 2| 2|
| 3| 4| 5| 6| ...... | 3| 3| 3|
| 4| 5| 6| 7| ...... | 4| 4| 4|

Нужно привести к такому виду: (не трогая ячейки в правой стороне)

| 1| 2| 3| 4| ...... | 1| 1| 1|
| 2| 3| 4| 5| ...... | 2| 2| 2|
| 4| 5| 6| 7| ...... | 3| 3| 3|
| 3| 4| 5| 6| ...... | 4| 4| 4|

Макрос который поднимает всю строку, выглядит так:

Sub stringUP()
If ActiveCell.Row > 1 Then
ActiveCell.Offset(0, 0).EntireRow.Cut
ActiveCell.Offset(-1, 0).EntireRow.Insert
ActiveCell.Offset(-1, 0).Activate
End If
End Sub

Макрос меняющий местами 2 одинаковых диапазона местами выглядит так:

Sub SwapRanges()
Dim ra As Range: Set ra = Selection
msg1 = "Надо выделить 2 диапазона ячеек одинакового размера"
msg2 = "Надо выделить 2 диапазона ячеек одинакового размера"
If ra.Areas.Count <> 2 Then MsgBox msg1, vbCritical, "Ошибка": Exit Sub
If ra.Areas(1).Count <> ra.Areas(2).Count Then MsgBox msg2, vbCritical, "Ошибка": Exit Sub
arr2 = ra.Areas(2).Value
ra.Areas(2).Value = ra.Areas(1).Value
ra.Areas(1).Value = arr2
End Sub

А решить мой вопрос, у меня не хватает интелекта. помогите пожалуйста.
ПланктонOffice'ный вне форума Ответить с цитированием
Старый 24.06.2012, 20:32   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

К примеру, вам надо «поднять» диапазон ячеек b4:e4
Для этого надо «вырезать» (удалить) вышестоящий диапазон ячеек b3:e3
Делается это так:
Код:
[b3:e3].Delete
Для активной ячейки это будет выглядеть примерно так:
Код:
Activecell.Resize(,3).Delete Shift:=xlUp
EducatedFool вне форума Ответить с цитированием
Старый 24.06.2012, 20:49   #3
ПланктонOffice'ный
Новичок
Джуниор
 
Аватар для ПланктонOffice'ный
 
Регистрация: 24.06.2012
Сообщений: 2
По умолчанию

Спасибо за оперативность, но мне нужно поднять выделенный (не всегда одинаковыый) диапазон.
ПланктонOffice'ный вне форума Ответить с цитированием
Старый 24.06.2012, 21:26   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А если подключить фантазию, и поэкспериментировать?

Код:
Sub test1()
    On Error Resume Next
    ' поднимаем на столько строк, сколько выделено
    Selection.Offset(-1 * Selection.Rows.Count).Delete
End Sub

Sub test2()
    On Error Resume Next
    ' поднимаем на одну строку
    Selection.Offset(-1).Resize(1).Delete
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 25.06.2012, 10:00   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
К примеру:

| 1| 2| 3| 4| ...... | 1| 1| 1|
| 2| 3| 4| 5| ...... | 2| 2| 2|
| 3| 4| 5| 6| ...... | 3| 3| 3|
| 4| 5| 6| 7| ...... | 4| 4| 4|

Нужно привести к такому виду: (не трогая ячейки в правой стороне)

| 1| 2| 3| 4| ...... | 1| 1| 1|
| 2| 3| 4| 5| ...... | 2| 2| 2|
| 4| 5| 6| 7| ...... | 3| 3| 3|
| 3| 4| 5| 6| ...... | 4| 4| 4|
судя по примеру, Вам нужно переставить местами два соседних одинаковых диапазона:
Код:
'Замена с верхним
Sub ChangeUp
Selection.Cut
Selection.Offset(-1*Selection.Rows.Count).Insert Shift:=xlDown
End Sub
'Замена с нижним
sub ChangeDown
Selection.Cut
Selection.Offset(Selection.Rows.Count).Insert Shift:=xlUp
end sub
з.ы. Можете поставить проверку на достаточное количество строк вверху для обмена
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 25.06.2012 в 10:02.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
css + seo как поднять блок content вверх кода irkprin HTML и CSS 1 07.05.2011 04:26
[Excel+VBA] простецкий макрос 10wmz 804040 Фриланс 2 02.03.2011 09:03
Сдвинуть выделенную часть текста вначале на n знаков Zirat Microsoft Office Word 2 17.05.2010 19:12
Скопировать выделенную часть ячейки! nikolai_P Microsoft Office Excel 8 05.05.2009 12:27
макрос VBA Excel Bor Microsoft Office Excel 5 25.01.2008 12:20